我从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
}]
}
}
我做错了什么?感谢
答案 0 :(得分:1)
如果没有完整的结构,很难分辨,但这里有一些你想要更新的内容:
InvestmentDetails
将是一个observableArray,因此在arrayForEach
中,您将希望第一个参数为self.InvestmentSummary.InvestmentDetails()
,以便您可以循环使用底层阵列
在每个细节上运行的函数中,您正在访问item.Cost()
,您需要将item
作为唯一参数传递给该函数。
使用映射插件更新数据时,如果已经创建了结构,则可以省略第二个参数(映射选项)。
以下是这些更新的小提琴:http://jsfiddle.net/rniemeyer/6dqfC/