knockoutjs ObservableArrays和排序功能:用户界面不更新(knockoutj

2019-07-29 07:08发布

在我的视图模型,我有一个knockoutjs ObserableArray。 我初始化视图模型刚过,它成功地结合了数据。 那么,我需要做的是排序的集合。

$.each(vm.searchResults(), function (i, property) {
    console.log(property.Name());
});

vm.searchResults().sort(function (a, b) {
    return a.Name().toLowerCase() > b.Name().toLowerCase() ? 1 : -1;
});

$.each(vm.searchResults(), function (i, property) {
    console.log(property.Name());
});

正如你所看到的,我输出的元件到控制台的名称,看看前后排序后的顺序。 排序工作得很好。 问题是与UI更新。 不知何故,UI不会被更新。

然后,尝试从下面的代码数组中删除一条记录,看看用户界面将到或没有响应。

vm.searchResults().shift();

该UI停留在相同,并没有再次更新。 什么会在这里是什么问题?

编辑:

下面是一个示例情况下,也: http://jsfiddle.net/tugberk/KLpwP/

这里同样的问题也是如此。

编辑:

我解决了这个问题,如图此示例中: http://jsfiddle.net/tugberk/KLpwP/16/但我仍然不知道为什么它的工作,因为我试过在第一。

Answer 1:

你观察到的展开阵列时,你要对它进行排序。 这是导致问题,因为数组被改变KO无法跟踪。 ko.observableArray()sort具有相同签名功能,它已经改变了它会通知观察到的用户。 溶液是非常简单的:除去括号vm.searchResults().sort => vm.searchResults.sort 。 结帐我的例子: http://jsfiddle.net/RbX86/

另一种方式告诉KO数组有变化-调用valueHasMutated方法与数组操作后。 请查看此示例: http://jsfiddle.net/RbX86/1/这种做法非常好,当你需要让你的阵列中的许多变化,并要刷新UI一次。



文章来源: knockoutjs ObservableArrays and sort function: UI is not updated