1

嗨,我正在尝试根据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/

就目前而言,一个下拉菜单中有一个 Anna 和 Bert,一个空的很好。

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

4

1 回答 1

1

这个有几个小问题:

您正在调用resource.Available()并且Available不是可观察的,因此您只需要检查resource.Available === isAvailable.

此外,您计算出的 observable 需要return以下结果self.getFilteredResources

这样做for resource in all会给你索引而不是资源本身。

我会推荐类似的东西:http: //jsfiddle.net/rniemeyer/jCYT7/

于 2012-04-28T13:08:26.277 回答