Knockout JS使用计算字段进行数据绑定

时间:2013-05-15 13:02:19

标签: javascript knockout.js

我正在尝试使用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/

你之前做过类似的事吗?如果是这样,你能指点一下如何实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

您的问题是您正在使用一个可观察的对象数组 - 只有在数组大小发生变化时才会重新计算,而不是数组的内容!

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

希望有所帮助!