Knockout映射复杂对象

时间:2013-12-06 15:23:49

标签: knockout.js knockout-mapping-plugin

例如,我们有复杂的对象:

var complex = {a: 1, b: 2, c: {c1: 1, c2: 2}};

我们希望它可以观察:

var observableComplex = ko.mapping.fromJS(complex);

问题:为什么我们得到c变量不可观察?在手册中我看到了一些,这是通过设计完成的,我想知道为什么?

a - observable,
b - observable
c - object:
  c1 - observable
  c2 - observable

1 个答案:

答案 0 :(得分:0)

没有可以映射的'c'对象...如果你想要观察它,你需要为它创建一个自定义映射并定义你的对象。

var Complex = function (data) {
    var self = this;
    self.c = ko.mapping.fromJS(data.c);
}

var CustomMapping = {
    create: function(options) {
        return new Complex(options.data);
    }
}

var observableComplex = ko.mapping.fromJS(complex, CustomMapping);

简而言之,这会创建一个新的Complex对象,然后在创建observableComplex时挖掘并映射'c'的数据。对于我的自定义对象,我有很多这样的情况来处理嵌套对象。

相关问题