gpt4 book ai didi

javascript - Knockout Computed Array 在排序时不通知订阅者

转载 作者:行者123 更新时间:2023-11-29 10:55:53 26 4
gpt4 key购买 nike

我有一个 knockout 计算数组,它将过滤器应用于另一个可观察数组。然后我想对计算出的数组进行排序并且可以成功地做到这一点,但是在应用另一个过滤器之前,数组不会在 View 中自行更新。

我已经尝试创建另一个使用计算值作为其数据的可观察数组,并使用新的可观察数组而不是计算数组,但这不起作用。我也尝试过订阅计算数组并​​获取新值并将其提供给可观察数组,但这也不起作用。可能值得注意的是,当对计算数组进行排序时,订阅者不会收到新值的通知。

  this.itemAccessories = ko.observableArray()
this.sortedItemAccessories = ko.observableArray()
this.searchItemAccessories = ko.computed(function() {
let q = this.searchAccessories()
if(q){
return ko.utils.arrayFilter(this.itemAccessories(), function(i) {
return i.itemNumber.toLowerCase().indexOf(q.toLowerCase()) >= 0
})
}
else {
return this.itemAccessories()
}
})
this.searchItemAccessories.subscribe((value) => {
if(value) {
this.sortedItemAccessories(value)
}
})
  lineVm.searchItemAccessories().sort(function(a, b){return b.itemNumber -
a.itemNumber})

我希望 View 在排序函数更改数组顺序时更新。

最佳答案

当您调用 [].sort() 时,它会对 array 进行排序,但在 KO 的情况下,它不会更新 observable。

尝试这样做:

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

关于javascript - Knockout Computed Array 在排序时不通知订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57512166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com