我最近在一篇博文中看到了这个小宝石,它概述了一种在 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 覆盖之外,还有其他方法可以控制特定对象的所有实例的序列化吗?