敲除JS中每个带有计算字段的数据绑定

Knockout JS foreach data-binding with computed fields

本文关键字:计算 字段 数据绑定 JS 敲除      更新时间:2023-09-26

我试图使用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>&nbsp;</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>
http://jsfiddle.net/ruslans/k7tK3/2/

你以前做过类似的事情吗?如果是这样,你能告诉我如何才能做到这一点吗?

你的问题是你正在使用一个对象的可观察数组-这将得到重新计算只有当数组的大小改变,而不是数组的内容!

你想要的是一个ko.observable数组。然后,当单个值发生变化时,将重新计算您的ko.computed函数的值。如果你有一个动态的项目列表要求和,那么使用一个可观察对象的可观察数组。

希望有帮助!