нокаут динамически заменяет объект в наблюдаемом массиве

У меня есть нокаутирующий наблюдаемый массив, например

var viewModel={
       people : ko.observableArray([
            { name: 'Bert' },
            { name: 'Charles' },
            { name: 'Denise' }
        ])};
 ko.applyBindings(viewModel);

с привязкой foreach я отобразил массив в таблице, теперь я хочу изменить первую строку таблицы динамически, используя индекс массива, который я пробовал (viewModel.people.name[0]("new value");, это не работает

Есть идеи?


person Bhaskar    schedule 08.08.2013    source источник


Ответы (1)


observableArray на самом деле является наблюдаемым объектом с дополнительными функциями, подобными массиву, а не простым массивом javascript. Итак, чтобы добраться до вашего массива, вам нужно сначала разрешить наблюдаемое:

viewModel.people()[0].name = "new value";

редактировать

Если вы хотите, чтобы изменение свойства .name одного из объектов в массиве вызывало изменение страницы, это свойство также должно быть наблюдаемым. Что-то вроде этого:

var viewModel={
    people : ko.observableArray([
        { name: ko.observable('Bert') },
        { name: ko.observable('Charles') },
        { name: ko.observable('Denise') }
    ])};

// Update:
viewModel.people()[0].name("new value");
person Joan Charmant    schedule 08.08.2013
comment
я пробовал не менять значение, viewModel.people()[0].name дает значение, когда я использовал в предупреждении - person Bhaskar; 08.08.2013
comment
это работает для меня: jsfiddle.net/dUULM/4 не забывайте, что просто поместить объект в observableArray не делает все свойства этого объекта сами наблюдаемыми. Конечно, вы можете сделать эти свойства наблюдаемыми, если хотите, но это независимый выбор. observableArray просто отслеживает, какие объекты он содержит, и уведомляет слушателей, когда объекты добавляются или удаляются. - person Paul Valla; 08.08.2013
comment
@PaulValla, спасибо, viewModel.people()[0]=({name:'Some new value'}); это сработало, дело в том, что обновление не видно без повторной перезагрузки модели представления. - person Bhaskar; 09.08.2013