【问题标题】:knockoutjs MVC 4 computed valuesknockoutjs MVC 4 计算值
【发布时间】:2013-02-18 20:10:00
【问题描述】:

我有以下视图模型

        var viewModel = new myViewModel([{
            Name: "Name",
            price: 32,
            tax: 22,
        }, {
            Name: "Name",
            price: 32,
            tax: 22,
        }]);

我有一个数据绑定到

       <tbody data-bind='foreach: personInfo'>

然后输入:

        <td>
        <input class='required' data-bind='value: Name'/>
        </td>
        <td>
        <input class='required' data-bind='value: Price'/>
        </td>
        <td>
        <input class='required' data-bind='value: Tax'/>
        </td>

我想得到价格的计算值,然后是税收,但是我没有成功。 :(

        self.totalSurcharge = ko.computed(function () {
        var total = 0;
        for (var i = 0; self.PersonInfo().length; i++)
        total += self.PersonInfo[i].price;
        return total;
        });

有什么想法吗?

更新:

类似这样的:http://jsfiddle.net/hamsaya/9XNDH/1/

谢谢

【问题讨论】:

  • 您能否发布一个声明 PersonInfo 的示例,并描述您尝试在哪里定义 totalSurcharge 计算的 observable?
  • 假设这个jsfiddle.net/hamsaya/9XNDH/1 我想要这里的总价。这就是我想要计算的方式。

标签: knockout.js knockout-mapping-plugin knockout-2.0 knockout-mvc


【解决方案1】:

很有趣,他们必须更新网站:

这就是答案。

    self.totalSurcharge = ko.computed(function () {
    var total = 0;
    for (var i = 0; i < gifts.length; i++)
    total =total+ gifts[i].price;
    return total;
    });  

【讨论】:

    【解决方案2】:

    我已经测试了下面的代码,它工作正常,

    修改你的html如下:

     <tr>
         <td> Total of price here</td>
         <td data-bind="text:totalPrice"></td>
     </tr> 
    

    在脚本中添加以下 Computed Observable 以计算总价:

    self.totalPrice = ko.computed({
        read: function() {
        var totalAmount = null;
        for(var i=0 , j=self.gifts().length ; i < j ; i++ )
        {
             totalAmount =Number(totalAmount)+ Number(self.gifts()[i].price);
        }
        if(totalAmount == 0){
            totalAmount = '0.00'
            }
        return totalAmount;
    }
    });
    

    【讨论】:

    • 谢谢您注意下面的答案也有效。我昨天发现的,我不必使用 read。
    【解决方案3】:

    根据文档,在使用索引器从中访问数据之前,您需要使用括号来访问 KO 包装的可观察数组:

    http://knockoutjs.com/documentation/observableArrays.html

    尝试替换

    self.PersonInfo[i].price
    

    self.PersonInfo()[i].price
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 2012-10-11
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多