我最近发现了一篇博客文章的小宝石,概述了一种控制object serialisation in 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
类型的两个属性。
我希望所有这些属性都由ko.educationVariable.prototype.toJSON
中的相应覆盖序列化 - 但这不起作用。
由于看起来这个覆盖功能不适用于"嵌套",是否有另一种方法来控制特定对象的所有实例的序列化,其他比移动所有进入主ViewModel toJSON覆盖的逻辑?