2014-04-02 20 views
0

我从Web服务获取JSON数据并使用映射插件创建可观察对象。 我想为可以将数据对象传递给函数的每个对象Pay属性添加手动订阅。添加手动订阅映射对象并在UI更改时传递活动对象

即:我有data-bind="foreach: { data: customerEnquiryCollection }"

,并在foreach的循环<input type="checkbox" data-bind="checked :Pay" />

,并在我的视图模型,当我拉从服务数据:

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有什么关系,实际上是传递了什么对象?但我被卡住了。

回答

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);        
}); 
+0

你的回答已经教了我很多。谢谢。 –