如何返回两个计算可观察量的总和?

时间:2015-06-19 10:49:25

标签: knockout.js

我对KnockoutJS并不熟悉,但我试图得到两个计算的observable的总和并将其绑定到表中:

我有这个:

var cost = ko.computed(function () {
        total = 0;

        ko.utils.arrayForEach(claimTreatments(), function (item) {
            total += item.Cost;
        })
        return total;
    });

 var amount = ko.computed(function () {
        total = 0;

        ko.utils.arrayForEach(claimDrugs(), function (item) {
            total += item.Drugcost;
        })
        return total;
    });

我正在尝试这样的事情,但没有工作。

var totalamount = ko.computed(function () {
        total = cost() + amount();
        return total;
    });

这也是我正在尝试将其绑定到(Amount字段)的表的图片,以清楚地了解方案that's the table I'm trying to bind to

任何帮助都将非常感谢!

2 个答案:

答案 0 :(得分:0)

只需轻微修复即可使用self。如果要将其绑定到视图。 var非常本地,viewModel视图不太清楚它。

<强>视图模型:

var claimDrugs = [{'Drugcost':10},{'Drugcost':10},{'Drugcost':10}
]

claimTreatments  = [{'Cost':10},{'Cost':10},{'Cost':10}
]

var ViewModel = function() {
var self=this;    
self.cost = ko.computed(function () {
        total = 0;

        ko.utils.arrayForEach(claimTreatments, function (item) {
            total += item.Cost;
        })
        return total;
    });

   self.amount = ko.computed(function () {
        total = 0;
        ko.utils.arrayForEach(claimDrugs, function (item) {
            total += item.Drugcost;
        })
        return total;
    });

    self.totalamount = ko.computed(function () {
        total = self.cost() + self.amount();
        return total;
    });
};

ko.applyBindings(new ViewModel()); // This makes Knockout get to work

查看:

<div >   
    <p> <label data-bind='text: cost' ></label></p> 
    <p> <label data-bind='text: amount' ></label></p> 
    <h2><label data-bind='text: totalamount'> </label></h2>  
</div>

工作小提琴 here

PS:是的确你可以按照你的方式添加两个计算但绑定到你使用上述方法的视图。

答案 1 :(得分:0)

如果您使用Knockout&gt; = 3.2.0,您还应该考虑使用pureComputed代替Computed