0

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

4

0 回答 0