循环中的挖空下划线循环会失去可观察的功能

knockout underscore loop in loop loses observable functionality

本文关键字:循环 功能 观察 失去 下划线      更新时间:2023-09-26

我正在尝试构建带有淘汰和下划线的表格.js .我遇到过这种情况,当我需要将一个循环放在另一个循环中时,例如:

<tbody >     
  <% _.each(ShippingCharge.Lines(), function(line) { %>
    <tr>  
       <td><input type="text" class="form-control" data-bind="value : line.ShippingZone.Name"/></td>
       <% _.each(line.Charges(), function(data) { %>
         <td><input type="text" class="form-control" data-bind="value : data"/></td>
       <% }) %>                     
    </tr>  
  <% }) %>
</tbody>

问题是当line.Charges()值被修改时,observableArray不会更新。你可以在jsFiddle上检查它。请注意,只有嵌套循环不会更新observaleArray,您可以更改Zones列值并查看它们是否更改observaleArray

这是您正在努力的映射插件。映射插件可以发挥魔力,但有时 ViewModel 不正确或映射插件无法处理

首先,这句话很重要:http://knockoutjs.com/documentation/observableArrays.html

关键点:observableArray 跟踪数组中的对象,而不是这些对象的状态

如果查看映射操作的结果,则属性

vm.ShippingCharge.Lines()[0].Charges

是一个可观察的数组。

您的要求是能够更改单个费用(跟踪费用数组中每个对象的状态)。因此,它应该是一个可观察量的数组,或者当数组中的值数量是动态的时,它应该是一个可观察量的可观察数组。

我不确定映射插件是否可以做到这一点。

无论如何,我认为您的 ViewModel 对于映射插件来说很复杂,所以请留下魔力,并手动编写视图模型。

更新(工作)小提琴:http://jsfiddle.net/martijn/NW5Vn/145/