挖空添加计算中断可观察数组

Knockout adding computed breaks observable array

本文关键字:观察 数组 中断 计算 添加      更新时间:2023-09-26

嗨,我正在尝试使用计算值来制作可观察数组的过滤版本,如此处的示例 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>​

我的视图模型看起来像这样:

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 时,我得到了两个空下拉列表。帮助 请告诉我我在哪里很笨。

这个有几个小问题:

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

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

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

我会推荐这样的东西:http://jsfiddle.net/rniemeyer/jCYT7/