这是我使用KnockoutJS编写的代码:
var viewModel = function () {
var self = this;
self.items = ko.observableArray([
{ name: "Item 1", value: 1 },
{ name: "Item 2", value: 2 },
{ name: "Item 3", value: 3 },
]);
self.addItem = function () {
self.items.push({ name: "New Item", value: self.items().length + 1 });
};
self.removeItem = function (item) {
self.items.remove(item);
};
self.sortItems = function () {
self.items.sort(function (a, b) {
return b.value - a.value;
});
};
self.reverseItems = function () {
self.items.reverse();
};
};
ko.applyBindings(new viewModel());
我想在knockoutJS中为数组排序和反向方法,我做了这些,但它们不工作,我不知道为什么没有操作!!!
2条答案
按热度按时间lhcgjxsq1#
这个例子中的错误是,如果你尝试对items数组进行排序或反转,HTML中的数据绑定将不会更新以反映项目的新顺序。这是因为sortItems()和reverseItems()函数在进行更改后不会调用项目observableArray上的valueHasMutated()方法。
要修复此错误,可以添加self.items.valueHasMutated();在sortItems()和reverseItems()函数的末尾。
x4shl7ld2#
我不认为公认的答案是正确的。
sort
和reverse
都是built-in,并且不需要您调用valueHasMutated
才能工作,正如您可以看到的here。您的代码中一定有一些我们没有看到的其他问题。