knockout.js Knockout计算数组在排序时不通知订阅者

fiei3ece  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(121)

我有一个knockout计算数组,它将一个过滤器应用到另一个可观察数组。然后我想对计算数组进行排序,并且可以成功地完成这一操作,但在应用另一个过滤器之前,该数组不会在视图中自行更新。
我尝试过创建另一个使用计算值作为数据的可观察数组,并使用新的可观察数组代替计算数组,但没有效果。我还尝试过订阅计算数组,并获取新值并将其提供给可观察数组。但这也不起作用。可能值得注意的是,当计算数组被排序时,订阅者并不被通知新值。
第一个
我希望当排序函数更改数组的顺序时,视图会更新。

vsnjm48y

vsnjm48y1#

当你调用[].sort()时,它会对array进行排序,但在KO的情况下,它不会更新可观察值。
请尝试执行以下操作:

var sortedItems = lineVm.searchItemAccessories().sort(function(a, b){return b.itemNumber - a.itemNumber});
lineVm.sortedItemAccessories(sortedItems); // this does the update
p4rjhz4m

p4rjhz4m2#

还有一个更简单的解决方案,直接从observable调用.sort()方法,而不是从它的内容调用:

lineVm.searchItemAccessories.sort(function(a, b){return b.itemNumber - a.itemNumber})

下面是一个工作示例:
第一个

相关问题