【发布时间】:2025-12-28 14:35:12
【问题描述】:
所以这里我的问题是我希望淘汰赛的 foreach 根据每个对象的一个值(order 的总 TTC)以降序显示我计算的对象数组。而且我不希望这个订单改变,即使当用户改变东西时订单中的totalTTC也会改变。但是每次进行更改时排序都会更新,我不知道如何禁用它。这是我的计算:
appViewModel.orders = ko.computed(() -> (
orders = []
# Check if seller of this shoppingCartLine exists
appViewModel.shoppingCartLines().forEach((shoppingCartLine) ->
existingOrder = null
orders.forEach((order) ->
if order.seller? and order.seller.id() == shoppingCartLine.ad.ownerJson.id()
existingOrder = order
)
# If it exits add it to its shoppingCartLines array
if existingOrder?
existingOrder.shoppingCartLines.push(shoppingCartLine)
return
# Otherwise create a new order from this shoppingCartLine
else
seller = shoppingCartLine.ad.ownerJson
shoppingCartLines = ko.observableArray([shoppingCartLine])
order = new Order(seller, shoppingCartLines, appViewModel.freeShippingFeesThreshold)
orders.push(order)
return
)
return orders
))
这是我的html:
<div data-bind="foreach: {data: orders().sort(function (o, r) { return r.totalHT() > o.totalHT() ? 1 : -1 }), as: 'order'}">
我只想触发一次排序功能。
【问题讨论】:
-
当添加/删除订单时,您是否淘汰了 foreach 以进行更新?如果没有,您可能只是不为此使用可观察对象。
-
我该怎么做?
-
只需将排序函数从绑定中取出,在数组填满后手动调用一次即可。
标签: knockout.js computed-observable