2

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

你以前做过类似的事情吗?如果是这样,你能给我指点如何实现这一点吗?

4

1 回答 1

2

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

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

希望有帮助!

于 2013-05-15T13:09:36.607 回答