2012-06-27 52 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