2012-11-19 107 views
2

我是Knockout的新手。我正在嘗試一個場景,但我無法使其工作。請幫忙。我正在使用MVC4。敲除陣列過濾器和計算可觀察不工作

function ViewModel(data) { 
     var self = this; 
     this.Collection = ko.observable(data); 


     self.GetFilteredCollection = ko.computed(function() { 
      var filteredCollection = ko.utils.arrayFilter(self.Collection(), function (item) { 
       return item.IsSelected == true; 
      }); 
      return filteredCollection; 
     }); 

     self.FilteredCollectionCount = ko.computed(function() { 
      return self.GetFilteredCollection().length;     
     }); 
}); 


var collectionList = eval('<%= new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model.Collection) %>'); 

    var VM = new ViewModel(collectionList); 
    ko.applyBindings(VM); 

我已將IsSelected屬性綁定到複選框。最初IsSelected屬性將被設置爲false。

<span id="Span1" data-bind="text:$root.FilteredCollectionCount"></span> 

我總是得到跨度值爲0,即使我選中該複選框。但我可以看到屬性IsSelected更改爲true。

回答

2

你需要做的IsSelected成觀察到的,計算出可觀察到能夠被通知時IsSelected的值更改

如果它已經是一個可觀察的,那麼你需要的代碼更改爲

return item.IsSelected() == true; 
+0

我還沒有定義一個項目模型。我只是通過序列化來模仿我從模型中獲得的價值。 – Venkat

+0

您需要使用observables,將數據手動映射到具有observables的視圖模型或使用映射插件 – Anders

+0

謝謝。它的工作現在。 – Venkat