2012-10-26 28 views
0
function AppViewModel() { 
self.tagbuttons=ko.observableArray([ 
    {shotbar:false, frozendrinks: false, livemusic: false, patio:false, food:false} 
    ]); 

self.toggleTag = function(data,event) { 
    var id = event.target.id; 

    self.tagbuttons()[0][id] = !self.tagbuttons()[0][id]; 
    console.log(self.tagbuttons()[0][id]); 
    if(self.tagbuttons()[0][id] == true) 
    { 
     $(event.target).closest('li').addClass("active"); 
     console.log(event.target.id+":"+"active"); 
    } 
    else 
    { 
     $(event.target).closest('li').removeClass("active"); 
     console.log(event.target.id+":"+"inactive");} 
    } 
} 

ko.applyBindings(new AppViewModel()); 

我的console.log(self.tagbuttons()[0] [id])輸出正確的布爾值,但該值不會在我的數組中更新。這裏是我的html:我可觀察的數組沒有更新,我是否正確地做到了這一點?

<div data-bind="text: tagbuttons()[0].shotbar"></di> 

回答

0

你需要聲明的MyAppViewModel後應用KO綁定和UI加載後:

$(document).ready(function(){ 
    ko.ApplyBindings(new MyAppViewModel())? 
}); 

除非你申請的KO綁定,什麼都不會外面發生的視圖模型。

+0

我離開的代碼了我原來的職位,我已編輯 –

0

下面是從KO文檔報價:

關鍵點:一個observableArray軌道哪些對象是在陣列中,這些對象

只需把一個對象到的不是狀態observableArray不會使該對象的所有屬性本身都是可觀察的。當然,如果你願意,你可以使這些屬性可觀察,但這是一個獨立的選擇。 observableArray只跟蹤它保存的對象,並在添加或刪除對象時通知監聽器。

所以,當你改變數組項目的價值敲除沒有通知。您可以使用valueHasMutated功能手動通知用戶:與observalbe

self.tagbuttons()[0][id] = !self.tagbuttons()[0][id]; 
self.tagbuttons.valueHasMutated(); 

或包裹在數組項:

self.tagbuttons = ko.observableArray([ 
ko.observable({ 
    shotbar:false, 
    frozendrinks: false, 
    livemusic: false, 
    patio:false, 
    food:false}) 
    ]); 
相關問題