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其作为唯一参数传递给该函数。

  • 当您使用映射插件更新数据时,如果结构已经创建,您可以省略第二个参数(映射选项)。

这里是这些更新的一个小提琴:http: //jsfiddle.net/rniemeyer/6dqfC/

于 2012-11-15T16:01:53.860 回答