問題
ノックアウトjsの作業と調査を行っていると、ある時点で行き詰まりました。ビューモデル (および基礎となるビューモデル) を 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 に複数のパートナーがある場合、これは 1 つのパートナーでのみ機能します。すべてのパートナーは最後のパートナーと同じ値になります。これは、JSON にシリアル化したい場合にのみ発生します。