2013-08-08 2 views
0

У меня есть нокаутирующий наблюдаемый массив какНокаута динамически заменить объект в наблюдаемом массиве

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

с Еогеаспом связывающим я отображаемый массивом в виде таблицы теперь я хочу Чейн первой строки таблицы динамически используя индекс массива i tryed (viewModel.people.name[0]("new value"); не работает

Любые идеи?

ответ

0

Наблюдаемый массив действительно является наблюдаемым с дополнительными дополнительными функциями, подобными массиву, а не простым массивом 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"); 
+0

я попытался его не изменяя значения, viewModel.people() [0] .name дает значение, когда я использовал в встревоженной – Bhaskar

+0

дает функцию ожидаемой ошибки – Bhaskar

+1

это работает для меня : http://jsfiddle.net/dUULM/4/ не забывайте, что просто поместить объект в [observableArray] (http://knockoutjs.com/documentation/observableArrays.html) не делает все сами свойства объекта наблюдаемы. Конечно, вы можете сделать эти свойства наблюдаемыми, если хотите, но это независимый выбор. Наблюдаемый массив просто отслеживает, какие объекты он хранит, и уведомляет слушателей о добавлении или удалении объектов. –

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