2012-11-27 168 views
4

的對於我目前的項目,我決定嘗試淘汰賽,我想知道如果下面是可能的。我正在爲一些基本列表操作編寫一個Intranet應用程序。該應用程序通過AJAX從MVC控制器獲取數據。在我的回調函數,我填充條目可觀察到數組如下:KnockoutJS:訂閱內觀察到observableArray進入

function showData(data) { // ajax callback 
    $.each(data, function (key, dmsEntry) { 
     vm.listToShow.push(new dmsList(dmsEntry)); // adds new dmsEntry into observableArray 
    }); 
} 

dmsList功能如下所示:

function dmsList(dmsEntry) { 
     return { 
      a: dmsEntry.a, 
      b: dmsEntry.b, 
      active: ko.observable(false) 
     } 
} 

可觀察到的「活動」,當用戶將變爲真標記一個列表條目。所以我的問題是:

所以我不知道是否有可能訂閱「活動」觀察到的?所以每次用戶標記一個條目時,一個自定義函數被調用並且條目被推入一個「markedEntries」可觀察數組中?

我已經實現的功能有:

<input type="checkbox" data-bind="checked: active, click: $root.addToActionQueue" /> 

但我想其他的辦法是一個更清潔的解決方案,因爲我也有其他的方式來「標記」項。

回答

5

讓你markedEntries陣列爲computed返回由您主動觀察到過濾列表陣列。它會每次更新一個項目的活動狀態改變。

var markedEntries = ko.computed(function() { 
    return ko.utils.arrayFilter(this.items(), function(item) { 
     return item.active(); 
    }); 
}); 

此外,假設listToShowobservable array,你都應該立刻像下面這樣設置它的值:

function showData(data) { //ajax callback 
    var list = []; 
    $.each(data, function (key, dmsEntry) { 
     list.push(new dmsList(dmsEntry); //adds new dmsEntry in observableArray   
    }); 
    vm.listToShow(list); 
} 
+0

很大,就像一個魅力TY!並立即設置可觀察的數組值是完全有意義的,thx指出了! – opp