[英]KnockoutJS arrayFilter doesn't update
这里是淘汰赛新手。 我尝试使用ko.utils.arrayFilter,但使用它时似乎没有更新。 我正在使用与arrayForEach相同的方法,所以我不确定这里出了什么问题。 使用arrayFilter时,如何获取要更新的列表?
JS:
function entry(name, category) {
this.name = ko.observable(name);
this.category = ko.observable(category);
}
function entriesModel() {
this.entries = ko.observableArray([]);
this.filter = function () {
ko.utils.arrayFilter(this.entries(), function (item) {
return item.category == 'SciFi';
});
};
this.sort = function () {
this.entries.sort(function (a, b) {
return a.category < b.category ? -1 : 1;
});
};
}
$(document).ready(function () {
$.getJSON("entries.php", function (data) {
entries(data);
});
ko.applyBindings(entriesModel());
});
HTML:
<ul data-bind="foreach: entries">
<li>
<p data-bind="text: name"></p>
<p data-bind="text: category"></p>
</li>
<button data-bind="click: filter">Filter</button>
<button data-bind="click: sort">Sort</button>
JSON:
[{"id":"1","name":"Iron Man","category":"SciFi"},{"id":"2","name":"Terminator","category":"SciFi"},{"id":"3","name":"The Pianist","category":"Drama"},{"id":"4","name":"The Hangover","category":"Comedy"}]
ko.utils.arrayFilter
不会在适当位置过滤数组。 它返回带有已过滤项目的新数组,并保留原始数组。
这里是如何使用ko.utils.arrayFilter
的示例: http : ko.utils.arrayFilter
不知道这是否正是您想要的,但是您的过滤器函数不会执行就地过滤器,因此您需要使用新的过滤器数组重新分配observableArray。 如
this.filter = function () {
this.entries(ko.utils.arrayFilter(this.entries(), function (item) {
return item.category == 'SciFi';
}));
};
看到这里: http : //jsfiddle.net/aKfUc/1/
如果您不想永久更改数组,则可能需要使用ko.computed observable:
http://knockoutjs.com/documentation/computedObservables.html
data-bind="value: currentFilter, valueUpdate: 'afterkeydown'"
将解决您的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.