0

API から JSON データを取得しています。InvestmentSummary.InvestmentDetails 配列のすべての「コスト」フィールドの合計コストを計算したいと考えています。次のエラーが表示されます。

Error: Unable to parse bindings.
Message: SyntaxError: invalid object initializer;
Bindings value: totalCost

私のviewModelコードは次のようになります:

        var init = { InvestmentSummary: { InvestmentDetails: [] } };
        ko.mapping.fromJS(init, {}, self);

        self.totalCost = ko.computed({
            read: function () {
                var result = 0;
                ko.utils.arrayForEach(self.InvestmentSummary.InvestmentDetails, function () {
                    result += item.Cost();
                });
                return result;
            }
        },self); 

        self.createBtnClick = function () {
            self.layoutView(true);
            var investAPI = "some_api";
            $.getJSON(investAPI, function (result) {
                ko.mapping.fromJS(result, {}, self);   
            });
        };

私の JSON データは次のようになります。

{
   InvestmentSummary: {
     InvestmentDetails: [
     {
        Cost: 0
     },
     {
        Cost: 1
     }]
   }
}

私は何を間違っていますか?ありがとう

4

1 に答える 1

1

完全な構造がないとわかりませんが、更新したいことがいくつかあります。

  • InvestmentDetailsマッピングを実行すると、observableArrayになります。したがって、基になる配列でループできるようにarrayForEach、最初の引数を。にする必要があります。self.InvestmentSummary.InvestmentDetails()

  • 各詳細で実行されている関数では、アクセスしているので、唯一の引数としてその関数item.Cost()に渡す必要があります。item

  • マッピングプラグインを使用してデータを更新する場合、構造がすでに作成されている場合は、2番目の引数(マッピングオプション)を省略できます。

これらの更新のフィドルは次のとおりです。http://jsfiddle.net/rniemeyer/6dqfC/

于 2012-11-15T16:01:53.860 に答える