2012-06-07 23 views
6

WCFからデータを受け取り、テーブルにバインドします。私はいくつかの計算フィールドを追加するためにこのフォーラムで助けられており、すべてが完全に機能します。この表のフッターに合計を追加したいと思います。私のページの簡単なバージョンはhttp://jsfiddle.net/qeUHd/3/に見ることができます。基本的には、私のサンプル "Amount"のAnotherフィールドの合計の結果であるViewModelにフィールドを追加する方法を学びたいと思います。どんな助けでも大歓迎です。 http://jsfiddle.net/qeUHd/3/ノックアウト計算合計

答えて

11

あなたのフィドルでは、あなたのデータセットをself.modelにマッピングするので、self.modelはobservableArrayです。それ以来、私はあなたの合計を得るためにcomputed valueをまとめる必要がありました。

http://jsfiddle.net/qeUHd/5/

self.total = ko.computed(function(){ 
    var total = 0; 
    for(var p = 0; p < self.model().length; ++p) 
    { 
     total += self.model()[p].Amount(); 
    } 
    return total; 
}); 

それからちょうどそれに結合していることを確認してください。

<td data-bind="text: total"> 

あなたは少し後方に物事をやっているが、私はそれはあなたがあなたのデータを受信して​​いる方法が原因だと仮定し、私はそれに対処し、上に移動。

+0

は、私がここに専門家の素晴らしいチームに理解ノックアウト論理感謝を開始ありがとうございました。 –

1

これらの種類の計算フィールドを(一般的に所属するように)ビューモデルに入れることを一般的にお勧めしますが、追加の計算プロパティを追加することが困難なデータを扱うときがあります。たとえば、ビュー内でデータをグループ化しているとします。その場合、あなたはまだ、合計を表示することができますが、ビューに計算を移動:

<td data-bind="text: $data.reduce(function(x,y) { return x + y.Amount(); }, 0)"></td>