私は最近、 KnockoutJS でオブジェクトのシリアライゼーションを制御する優れた方法を概説しているブログ投稿のこの小さな宝石に出くわしました。
ただし、メインの ViewModel でプロパティを形成するカスタム オブジェクトにこの原則を適用しようとしています。
例(参照リンクから持ち上げた部品):
function Person(first, last) {
this.first = ko.observable(first);
this.last = ko.observable(last);
this.full = ko.dependentObservable(function() {
return this.first() + " " + this.last();
}, this);
this.educationCollege = new ko.educationVariable();
this.educationSchool = new ko.educationVariable();
}
Person.prototype.toJSON = function() {
var copy = ko.toJS(this);
delete copy.full;
return copy;
};
ko.educationVariable = function() {
return {
institution: ko.observable(),
grade: ko.observable()
};
};
ko.educationVariable.prototype.toJSON = function() {
var copy = ko.toJS(this);
return copy.institution + ": " + copy.grade;
};
ご覧のとおり、のシリアル化Person
はプロトタイプのtoJSON
オーバーライドによって制御されており、これは問題なく機能します。
Person
ただし、にはカスタムko.educationVariable
タイプの 2 つのプロパティがあることにも注意してください。
そのようなすべてのプロパティをそれぞれのオーバーライドによってシリアル化したいと思いますko.educationVariable.prototype.toJSON
が、これは機能していません。
このオーバーライド機能は「ネスト」では機能しないように見えるため、すべてのロジックをメイン ViewModel の toJSON オーバーライドに移動する以外に、特定のオブジェクトのすべてのインスタンスのシリアル化を制御する別の方法はありますか?