我从Web服务获取JSON数据并使用映射插件创建可观察对象。
我想为每个可以将数据对象传递给函数的对象Pay
添加一个手动订阅。
即:我有data-bind="foreach: { data: customerEnquiryCollection }"
并在foreach <input type="checkbox" data-bind="checked :Pay" />
在我的View模型中,当我从服务中提取数据时:
var results = ko.observableArray();
ko.mapping.fromJS(data, {}, results);
for (var i = 0; i < results().length; i++) {
var obj = results()[i];
obj.Pay.subscribe(function (checked) {
checkPayGroups(checked, obj.EnquiryId());
}.bind(this));
customerEnquiryCollection.push(obj);
};
checked
的值总是正确传递,但我看似obj.EnquiryId()的随机结果。我希望这与this
有关,实际传递的对象是什么?但我被卡住了。
答案 0 :(得分:2)
obj
将改变for循环的每次迭代。因此,当Pay
更改时,它将获得最后结果的EnquiryId
。
迭代results
时尝试创建新范围:
var results = ko.observableArray();
ko.mapping.fromJS(data, {}, results);
ko.utils.arrayForEach(results(), function(obj) {
obj.Pay.subscribe(function (checked) {
checkPayGroups(checked, obj.EnquiryId());
}.bind(this));
customerEnquiryCollection.push(obj);
});