1

ノックアウトJSを使用してforeachテンプレートの行合計を更新する方法に行き詰まっています

    <div id="timeEntryList" data-bind="foreach: timeEntries">
        <table >
            <tr>
                ...

                <td>  //there are more of this, not included here
 <input type="number" 
    data-bind="value: Days[6].Hours, 
               event: { change: $root.setDirty }" />

                </td>
                <td> //this part needs to be updated when the above input is changed
                    <span data-bind="text: $root.sumRow($data)">
                    </span>
                </td>

最後の TD には、foreach で現在の項目について報告された時間の合計を表示する span 要素が含まれています。データが読み込まれると正しく表示されますが、要素を編集すると古いままになります。入力ボックスの値を変更すると、この要素を更新するにはどうすればよいですか?

これは、非常にスリム化されたバージョンのビュー モデルです。

var TimeReportModel = function (init) {
    this.timeEntries = ko.observableArray(init.TimeEntries);

    //... helper functions
};

TimeEntries は、報告された 1 週間あたりの時間を表すオブジェクトです。そのため、日付の配列が含まれており、各日には時間プロパティがあります。

4

1 に答える 1

2

バインドしているものに基づいて、通常の関数の結果にバインドしているように見えます。変更があったときに更新された値を確認したい場合は、オブザーバブルにバインドする必要があります。合計をビューモデルで計算されたオブザーバブルにして、それにバインドします。

ビューモデルがどのように見えるか、または何を合計するかはわかりませんが、次のようになります。

// calculate the sum of the hours for each of the days
self.totalDays = ko.computed(function () {
    var sum = 0;
    ko.utils.arrayForEach(self.days(), function (day) {
        sum += Number(day.hours());
    });
    return sum;
});

これがデモンストレーションするフィドルです。

于 2012-09-03T06:35:00.667 に答える