【发布时间】:2015-03-25 04:27:02
【问题描述】:
我正在尝试使用从后端 JSON 到淘汰视图模型的选定值来表示多个选择。 并且需要在第一次更改每个选择时检索此 JSON - 一切正常,但如果我再次应用映射 (ko.mapping.fromJS(test_data, ViewModel)),所有订阅都将丢失有谁知道如何避免这种情况情况?
jsfiddle(我不知道为什么选择没有它的值,没有 jsfiddle - 一切都好): http://jsfiddle.net/0bww2apv/2/
$(ViewModel.attributes()).each(function(index, attribute) {
attribute.attribute_value.subscribe(function(name) {
console.log('SUBSCRIBE', name);
var send_data = {};
$(ViewModel.attributes()).each(function (index, attribute) {
send_data[attribute.attribute_name.peek()] = attribute.attribute_value.peek();
if (attribute.attribute_value() === null) {
send_data = null;
return false;
}
});
if (send_data) {
console.log('REQUEST TO BACKEND: ', ko.toJSON(send_data));
ko.mapping.fromJS(test_data, ViewModel);
// subscriptions is lost here !
}
});
});
【问题讨论】:
-
试试这个jsfiddle.net/supercool/0bww2apv/4让我知道以防万一。干杯
-
啊,参数顺序,谢谢...订阅现在保留,但映射无法按预期工作,每次选择的更新都应重置所有选择值,换句话说,每次更改都应将所有选择重写为初始值数据,我添加了一些console.log,你可以在那里看到之前/之后的数据,“attribute_value”也被放置到错误的可观察对象中(但第一次读没问题,奇怪)。 jsfiddle.net/0bww2apv/7