[英]Knockout adding computed breaks observable array
嗨,我正在尝试使用计算值来制作可观察到的数组的过滤版本,如此处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填充第二个下拉列表时,我得到两个空的下拉列表。 帮助请告诉我我在哪里傻。
这个问题有两个小问题:
您正在调用resource.Available()
和Available
并不是可观察的,因此您只需要检查resource.Available === isAvailable
。
此外,您计算出的可观察值需要return
self.getFilteredResources
的结果
for resource in all
将为您提供索引,而不是资源本身。
我会推荐类似的东西: http : //jsfiddle.net/rniemeyer/jCYT7/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.