将嵌套的淘汰视图模型解析为JSON时出现问题
Troubles with parsing nested knockout viewmodels to JSON
问题
当我在工作和探索knockoutjs时,我在某个时候陷入了困境。我想将视图模型(以及底层视图模型(序列化为JSON。这将以无限循环结束,因为子视图模型具有引用父视图模型的属性。解决这个问题的最佳实践是什么?
代码
var Partner = function (parent) {
var self = this;
self.parent = parent;
self.name = ko.observable('');
}
var ProjectViewModel = function () {
var self = this;
self.nr = ko.observable(0);
self.tite = ko.observable('');
self.partners = ko.observableArray();
self.addPartner = function () { self.partners.push(new Partner(self)) };
self.removePartner = function (c) { self.partners.remove(c) };
};
var vm = new ProjectViewModel();
ko.applyBindings(vm);
$("#button").click(function () {
alert(ko.toJSON(vm));
}
到目前为止我尝试了什么
我尝试在Partner视图模型中添加以下方法:
Partner.prototype.toJSON = function () {
var copy = ko.toJS(self);
delete copy.parent;
return copy;
}
这只适用于一个合作伙伴,如果ProjectViewModel有多个合作伙伴时,每个合作伙伴的价值都将与上一个伙伴相同。只有当我想将它序列化为JSON时,才会发生这种情况。
有几种方法可以处理这种情况。KO的ko.toJS
部分可以正确处理此问题。最终是JSON.stringify
(在ko.toJSON
中的ko.toJS
之后调用(导致错误。
原型上的toJSON
方法非常接近,只是您希望处理this
而不是self
。
所以,它看起来像:
Partner.prototype.toJSON = function() {
var copy = ko.toJS(this);
delete copy.parent;
return copy;
};
其他处理方法:
1-实际上不要将父对象存储在子对象上,只需根据传递给构造函数的参数在任何处理程序中直接引用它。
var Partner = function (parent) {
var self = this;
self.name = ko.observable(name);
self.doSomething = function() {
//can use "parent" directly here without storing it anywhere
};
};
2-"隐藏"你的父母参考
var Partner = function (parent) {
var self = this;
self.meta = function() {};
self.meta.parent = parent;
self.name = ko.observable(name);
};
您可以将parent
值放在函数后面(可以作为可观察对象的子属性(。当你的结构被ko.toJS
变成一个普通的JS对象时,函数的任何子属性都会丢失。
3-根据你想做的事情改变你的应用程序的结构。假设每当孩子的名字被更改时,父母都想做出反应。您可以传入回调,设置订阅,并在它更改时执行它
var Partner = function (nameChangedCallback) {
var self = this;
self.name = ko.observable(name);
if (typeof nameChangedCallback == "function") {
self.name.subscribe(function() {
nameChangedCallback.call(self, self);
});
}
};
相关文章:
- Ext.js从json构建模型关系的问题
- 将数据加载到使用JSON返回的表单字段时出现问题
- 在javascript中使用json数据导致问题
- 神秘的ajax json请求问题jQuery
- JavaScript/jQuery JSON数组问题-值为未定义
- 从第三方服务器发出解析json的问题
- 获取json结果的身份验证问题
- 关于复杂JSON解析(angularjs和javascript)的问题
- jQuery表单和Json问题
- NG重复角度“2层”JSON问题
- 遇到 d3.json 问题,不起作用
- googleapi和jquery的json问题
- JavaScript+JSON问题:无法加载照片/undefined.jpg
- nodeJS上的JSON问题
- 在rails中解析JSON问题
- 谷歌图表JSON问题
- IE9中的Javascript Json问题
- JSON问题和实现一些现有的JavaScript到这个混乱
- JSON问题与跨域.解析出iframe
- 简单的JSON问题…如何插入变量