您好我正在尝试使用计算值来制作可观察数组的过滤版本,如此示例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填充的第二个下拉列表时,我得到两个空的下拉列表。帮助请告诉我我愚蠢的地方。
答案 0 :(得分:1)
这一个中的几个小问题:
您正在呼叫resource.Available()
而Available
不是可观察的,因此您只需检查resource.Available === isAvailable
。
此外,您的计算可观察量需要return
self.getFilteredResources
执行for resource in all
将为您提供索引而不是资源本身。