簡體   English   中英

在數據綁定foreach中僅對一次計算的分類敲除

[英]Sort Knockout's computed only once in data-bind foreach

所以在這里我的問題是我希望敲除的foreach根據每個對象一個值(Order的totalTTC)以降序顯示我計算的對象數組。 而且我不希望此順序發生更改,即使用戶更改內容時訂單中的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'}">

我只希望排序功能被觸發一次。

由於您說的是添加/刪除訂單時不需要敲除更新,也不需要更新排序,因此訂單不必是可觀察的。

我個人也會在viewModel中對其進行排序。 我希望標記包含盡可能少的代碼。

  appViewModel.orders = computeOrders().sort(function (o, r) { return r.totalHT() > o.totalHT() ? 1 : -1 });

  function computeOrders() {
      # 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: orders">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM