ViewModel声明为Object文字。如何为可观察的数组元素赋值?

时间:2013-12-16 05:58:37

标签: knockout.js

我有一个非常简单的测试:

jsfiddle example

我已经在ojbect文字模式中声明了我的viewmodel。

然后在复选框上单击,我想更改observablearray元素的值。

当我尝试这个时:

ko.utils.arrayForEach(viewModel.people(), function(person) {
            console.log("was: " + person.name); 
            person.name ("Alex");
            console.log("changedto: " + person.name);  
        });

(注意person.name(“alex”),我有js错误:'未捕获TypeError:对象#的属性'名称'不是函数'。当我将行更改为'person.name =“alex”时'我没有错,但我的用户界面没有改变!

请帮助我将属性赋值给可观察数组元素,因此更改会反映在UI中。

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是数组中对象的属性不是可观察的,因此它们不是函数,UI不会随着它们的更改而更新。

如果您将其更改为:

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

然后它们将是可观察的,并且UI将在更改时更新。