2015-06-19 44 views
0

我不是很熟悉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; 
    }); 

而且這是表的圖片我試圖將其綁定到(金額字段),給場景that's the table I'm trying to bind to

任何幫助將是非常讚賞的一個明確的想法!

+0

你能提供JSFiddle顯示該問題嗎? – dotnetom

回答

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:確實是這樣,你可以添加兩個你計算的方式,但綁定到查看你使用上面的方法。

+0

thanks @supercool!快速的問題,爲什麼不是(var)工作?我用它在我的代碼中的一堆,他們工作得很好! –

+0

var會很好地添加計算,但顯示它在視圖中不會幫助它。檢查上述編輯 –

0

如果您使用的是Knockout> = 3.2.0,則還應該考慮使用pureComputed而不是Computed