我正在尝试使用Knockout.js绑定每行3个字段的网格:净价(文本框),税额(标签),总价(文本框)。
只要净价或总价发生变化,所有字段都会自动调整。计算很简单:net price = total price - tax amount; total price = net price + tax amount; tax amount = taxrate (const) * net price
在这个小提琴中展示了单个实体的这些绑定:http://jsfiddle.net/ruslans/yEDRT/
但是我怎么能在observable array
中完整列表呢?我不知道?
TaxRate
对于每一行都是常量,但可以是不同的(它来自源数据)。
加。所有数字字段必须格式化为2位小数,因此功能。这是我到目前为止所得到的:
<table>
<thead>
<tr>
<th> </th>
<th>Net Price</th>
<th>Tax Band</th>
<th>Tax Amount</th>
<th>Total Price</th>
</tr>
</thead>
<tbody data-bind="foreach: OptionsModel.AvailableDealerFitOptions">
<tr>
<td>
<label class="checkbox">
<input type="checkbox" class="optionCheck" /> <span data-bind="text: Description"></span>
</label>
<input type="hidden" class="optionTaxRate" data-bind="value: TaxRate" />
</td>
<td>
<input type="number" min="0" max="99999999.99" step="0.01" data-bind="value: $root.formatNumber(NetPrice)" />
</td>
<td> <span data-bind="text: TaxBandDisplayName"></span>
</td>
<td> <span class="uneditable-input" data-bind="text: $root.formatNumber(TaxAmount)"></span>
</td>
<td>
<input type="number" min="0" max="99999999.99" step="0.01" data-bind="value: $root.getTotalDealerFitOptionPrice($data)" />
</td>
</tr>
</tbody>
</table>
你之前做过类似的事吗?如果是这样,你能指点一下如何实现这一目标吗?
答案 0 :(得分:2)
您的问题是您正在使用一个可观察的对象数组 - 只有在数组大小发生变化时才会重新计算,而不是数组的内容!
你想要的是一个ko.observable数组。然后,当各个值发生变化时,将重新评估您的ko.computed函数。如果你有一个动态的项目列表要求和,那么使用一个可观察的observable数组。
希望有所帮助!