2015-03-18 3 views
0

Я пытаюсь обновить значение массива, связанное с ObservaleArray. Однако он не обновляется.Нокаут ObservableArray не обновляется в UI

function AppViewModel() { 
    var self = this; 
    self.Title=ko.observable('Sample'); 
    self.people = ko.observableArray([ 
     new Person('Ajay'), 
     new Person('Kumar') 
    ]); 

    self.updateAns=function(){ 
    self.people()[0].Answered=false; 
    }; 

    self.updateName=function(){ 
    self.people()[0].Name('John'); 
    }; 
    self.updateTitle=function(){ 
    self.Title('New Title'); 
    }; 

} 

var Person=function(name){ 
    this.Name=name; 
    this.Answer=[{Id: 1, Answered:true},{Id:2, Answered:true}] 
} 

ko.applyBindings(new AppViewModel()); 

Full Demo

Как сохранить значение синхронизации массива?

ответ

1

Наблюдаемый массив будет слушать только изменения в самом массиве, необходимо также членов Weather.co.ua исполнился лица, чтобы быть наблюдаемыми, если вы хотите, чтобы обновить

+0

Человек данных я получаю от сервера является массивом. Мне нужно создать другой объект и украсить каждое свойство как ko.observable? Есть ли способ украсить весь объект, например ko.observable (объект), вместо того, чтобы подключать каждое свойство? – Billa

+0

Да, вам нужно создать представления ViewModel вашей модели. Вы можете использовать плагин Mapping или сделать это вручную. – Anders

1

Наблюдаемые массив отслеживает изменения в collection of things. Это означает, что он не обнаруживает изменения элементов массива, а только изменения коллекции, такие как элементы добавления/удаления/замены. Чтобы сохранить значение Person name, оно должно быть observable.

var Person = function(name){ 
    this.Name = ko.observable(name); 
    ... 
} 

Updated demo

+0

Личные данные, которые я получаю от сервера, представляют собой массив. Мне нужно создать другой объект и украсить каждое свойство как ko.observable? Есть ли способ украсить весь объект, например ko.observable (объект), вместо того, чтобы подключать каждое свойство? – Billa

+0

В этом случае вы можете посмотреть плагин отображения нокаутов: http://knockoutjs.com/documentation/plugins-mapping.html, который может автоматически создавать наблюдаемые данные для вас. –

+0

@Billa Да, вы можете это сделать. Другой способ - использовать [mapping plugin] (http://knockoutjs.com/documentation/plugins-mapping.html). –

Смежные вопросы