Knockout JS Computed Array:无效的对象初始化器

时间:2012-11-15 15:51:36

标签: knockout.js knockout-mapping-plugin

我从API获取JSON数据,我想计算InvestmentSummary.InvestmentDetails数组中所有'cost'字段的总成本。 我收到以下错误:

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
     }]
   }
}

我做错了什么?感谢

1 个答案:

答案 0 :(得分:1)

如果没有完整的结构,很难分辨,但这里有一些你想要更新的内容:

    在完成映射之后,
  • InvestmentDetails将是一个observableArray,因此在arrayForEach中,您将希望第一个参数为self.InvestmentSummary.InvestmentDetails(),以便您可以循环使用底层阵列

  • 在每个细节上运行的函数中,您正在访问item.Cost(),您需要将item作为唯一参数传递给该函数。

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

以下是这些更新的小提琴:http://jsfiddle.net/rniemeyer/6dqfC/