问题
当我在工作和探索 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.prototype.toJSON = function () {
var copy = ko.toJS(self);
delete copy.parent;
return copy;
}
这仅适用于一个合作伙伴,如果 ProjectViewModel 有多个合作伙伴,则每个合作伙伴都将具有与最后一个合作伙伴相同的值。仅当我想将其序列化为 JSON 时才会发生这种情况。