从服务器中删除映射数据,丢失订阅
Knockout mapping data from server, lost subscriptions
我试图用它的选定值来表示从后端JSON到淘汰视图模型的多个选择。当每次选择都被更改时,第一次需要检索这个JSON-一切都可以,但如果我再次应用映射(ko.mapping.fromJS(test_data,ViewModel)),所有订阅都会丢失。有人知道如何避免这种情况吗?
jsfiddle(我不知道为什么select没有它的值,没有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 !
}
});
});
终于用knockout.reactor插件解决了我自己的问题,如果我们去掉所有的辅助结构,它将看起来像:
var ViewModel = ko.mapping.fromJS(test_data);
ko.applyBindings(ViewModel);
ko.watch(ViewModel, { depth: -1 }, function(parents, child, item) {
// here we need to filter watches and update only when needed, see jsfiddle
ko.mapping.fromJS(test_data2, {}, ViewModel);
});
通过这种方式,我们更新了选择,并且在订阅递归方面没有问题。
完整版本(有关详细信息,请参阅控制台输出):http://jsfiddle.net/r7Lo7502/
相关文章:
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何配置分析以将数据发送到我自己的服务器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- React路由器服务器端渲染和ajax获取数据
- 在HTML页面上显示node.js服务器中的数据
- 从服务器获取数据并在选择控件中使用ng选项无法显示选项
- 如何在服务器上保存数据以备日后使用
- 将JSON数据从服务器加载到knockout.jsobservable中
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- Highcharts可以从服务器加载数据,但不能更新
- JQGrid使用服务器编辑后的更新数据刷新数据
- 返回之前获取数据服务器端
- 验证后 JSON 数据服务器端
- Angular E2E 测试数据:ngMockE2E 或测试数据服务器
- 如何在 Meteor 中存储特定于客户端的数据服务器端
- 在我们的数据服务器上保存谷歌地图中的gData
- 如何从服务器接收数据(服务器用java编写,到HTML文件)
- 如何发送数据服务器(JAVA编写)到客户端(Node.js编写)
- 如何访问Backbone Fetch数据服务器端
- 发布数据服务器端并在提交表单时执行javascript代码