Knockout添加计算中断可观察数组

时间:2012-04-28 11:03:26

标签: javascript knockout.js

您好我正在尝试使用计算值来制作可观察数组的过滤版本,如此示例http://knockoutjs.com/documentation/fn.html(位于底部)。

对于我有的HTML

<select  width="50px" data-bind="options: $root.resources, optionsText: 'Name'"></select>
<select  width="50px" data-bind="options: $root.available, optionsText: 'Name'"></select>​

我的viewModel看起来像这样:

var viewModel = function() {
    var self = this;
    self.resources = ko.observableArray([{Name: "Anna",Available: true}, {Name: "Bert", Available: false}]);  

    self.getFilteredResources = function (isAvailable) {
        var all = self.resources(), results = [];
        var resource;
        for (resource in all){
            if (resource.Available() === isAvailable){
                results.push(resource);
            }
        }
        return results;
    };    
    //self.available = ko.computed(function() { self.getFilteredResources( true);}, this);    
};

ko.applyBindings(new viewModel());​

您还可以在此处查看代码http://jsfiddle.net/patrickhastings/eCtFY/1/

现在看来,输出是安娜和伯特的一次下拉,一次是空的,这很好。

当我取消注释声明self.available的行而不是用Anna填充的第二个下拉列表时,我得到两个空的下拉列表。帮助请告诉我我愚蠢的地方。

1 个答案:

答案 0 :(得分:1)

这一个中的几个小问题:

您正在呼叫resource.Available()Available不是可观察的,因此您只需检查resource.Available === isAvailable

此外,您的计算可观察量需要return self.getFilteredResources

的结果

执行for resource in all将为您提供索引而不是资源本身。

我会建议像:http://jsfiddle.net/rniemeyer/jCYT7/