为什么我的 Knockoutjs 计算 observable 不起作用?

Nov*_*per 5 knockout-2.0 knockout.js

我似乎无法计算出这项工作的价值。任何输入将不胜感激。

我从服务器获取我的价格值。

 var pModel = function () {
     var self = this;
     self.prices = ko.observable({ "ID": 1,"Price1": 12,"Price2": 12});

     self.Total = ko.computed(function () {
         var total = 0;
         total = self.prices().Price1 + self.prices().Price2;
         return total;
     });
 };
 var VModel = new pModel();
 ko.applyBindings(VModel);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.1.0/knockout-min.js"></script>
<form action='/someServerSideHandler'>
    <table>
        <thead>
            <tr>Prices</tr>
        </thead>
        <tbody id="calc">
            <tr>
                <td>Price 1</td>
                <td>
                    <input data-bind='value: prices().Price1' />
                </td>
            </tr>
            <tr>
                <td>price 2</td>
                <td>
                    <input data-bind='value: prices().Price2' />
                </td>
            </tr>
            <td>TOTAL</td>
            <td> <span data-bind="text: $root.Total"></span>
            </td>
        </tbody>
    </table>
</form>
Run Code Online (Sandbox Code Playgroud)

Eva*_*ahn 4

您的prices变量是可观察的,但其成员不是。像这样重新定义它:

 self.prices = ko.observable({
     ID: ko.observable(1),
     Price1: ko.observable(12),
     Price2: ko.observable(12)
 });
Run Code Online (Sandbox Code Playgroud)

现在,这几乎18可以工作,但是如果您更改值,它会将它们转换为字符串,因此和 的总数12将是1812!我们需要将这些字符串转换为数字。

 self.Total = ko.computed(function () {
     var price1 = parseFloat(self.prices().Price1());
     var price2 = parseFloat(self.prices().Price2());
     return price1 + price2;
 });
Run Code Online (Sandbox Code Playgroud)

你应该已经准备好了!