Knockout JS:在ViewModel中控制自定义对象的序列化

时间:2015-07-13 22:20:22

标签: javascript json serialization knockout.js knockout-3.0

我最近发现了一篇博客文章的小宝石,概述了一种控制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覆盖的逻辑?

0 个答案:

没有答案