添加手动订阅映射对象并在UI更改时传递活动对象

时间:2014-04-02 12:39:44

标签: knockout.js

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

1 个答案:

答案 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);                            
});