2012-06-27 29 views
0

我是Knockout.js的新手, 我创建了一个可观察数组并初始化了一些数据。我期待任何时候界面改变(复选框或文本值)模型也应该更新。我也订阅了数组。但我的回调方法从未被调用过。Knockout observable array不按预期方式工作

var viewModel = { 
    seats:ko.observableArray([ 
     { "No": "1", "Booked": "" }, ... 
    ]) 
}; 

viewModel.seats.subscribe(
    function(newvalue){ 
     alert(newvalue); 
    } 
); 

ko.applyBindings(viewModel); 

http://jsfiddle.net/2NMJX/

回答

3

您刚刚创建了一个可观察的阵列 - 这意味着,每当阵列更新你收到此通知(一个元素被添加或删除,例如:http://jsfiddle.net/2NMJX/1/),而不是在元素他们自己更新。为了实现这一目标,你将需要封装在观测值:

seats: ko.observableArray([ 
    { "No": ko.observable("1"), ... 

然后,你可以订阅这些观测:

viewModel.seats()[0].No.subscribe(... 

http://jsfiddle.net/2NMJX/2/(尝试编辑“1”)

+0

感谢您的澄清。基本上,我希望在复选框状态发生变化时通知座席号码。 – Brainchild

+0

一个简单的方法是使用构造函数,它像一个类,而不是普通对象:http://jsfiddle.net/2NMJX/3/ – Niko

+0

哇..非常棒!谢谢Niko。 – Brainchild