2013-05-08 81 views
0

我對knockoutjs比較陌生,但我似乎遇到了複選框的observableArray問題,複選框有一些用於檢查和禁用的可觀察屬性。KnockoutJS檢查綁定問題

使用敲除我可以檢查並取消選中該框,但似乎一旦我手動與複選框交互(IE通過點擊鼠標)基礎數據似乎正在改變,但我不能用淘汰賽檢查或取消選中該框。

HTML

<div id="filterByPrice" data-bind="foreach: priceFilters"> 
    <div> 
     <input type="checkbox" data-bind="attr: {id: $index, value: value, checked: checked, disable: disabled}" /> 
     <span data-bind="text: label"></span> 
    </div> 
</div> 

的Javascript

function FilterBy(name, value, label) { 
    this.name = name; 
    this.value = value; 
    this.label = label; 
    this.disabled = ko.observable(false); 
    this.checked = ko.observable(false); 
} 

$(function() { 
    var viewModel = { 
     priceFilters: ko.observableArray([ 
     new FilterBy("price0", "0", "All Prices")]) 
    }; 

    ko.applyBindings(viewModel); 
}); 

http://jsfiddle.net/paulwilliams0/EYEz2/

有什麼,我這樣做是錯誤的?我不僅是新的淘汰賽,而且我一般都是MVVM的新手。非常感謝

回答

1

在這裏,我有你的榜樣的工作版本:爲您的複選框

  1. 數據綁定屬性:使用內置的結合 處理器,ATTR:{ID :$ index}是可以的,但值,檢查並禁用 不應該在大括號內。

  2. 將knockout功能用於您的功能,而不是將jQuery混合到它中。

    function viewModel(){ 
    var self = this; 
    self.priceFilters = ko.observableArray([ 
        new FilterBy("price0", "0", "All Prices"), 
        new FilterBy("price1", "1", "1st Price") 
    ]); 
    
    
    self.checkAllPrices = function(){ 
        ko.utils.arrayForEach(self.priceFilters(), function(item){ 
         item.checked(true); 
        }) 
    }; 
    self.unCheckAllPrices = function(){ 
        ko.utils.arrayForEach(self.priceFilters(), function(item){ 
         item.checked(false); 
        }) 
    }; 
    

    }

我改變視圖模型的函數,而不是使用對象的文字符號,但是這只是我的首選方式,你可以使用對象的文字符號,如果你想要的。

+0

非常感謝!正是我想要的。 – Paul 2013-05-08 16:48:59