2013-05-08 80 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