Knockout Mapping覆盖Computed Observables,这是故意的吗?

时间:2015-07-14 17:10:21

标签: javascript knockout.js knockout-mapping-plugin

说,你有一个如下设置:

var model = function() {
    this.base = ko.observable("Initial");
    this.dependent = ko.computed(function() {
        return this.base() + ", computed";
    }, this);
};

var vm = new model();

此时,vmObject { base: observable(), dependent: dependentObservable() }(正如所料)

但是,一旦我跑:

ko.mapping.fromJS({base: "hello", dependent: "hi"}, {}, vm)

vm变为Object { base: observable(), dependent: "hi", __ko_mapping__: Object }

dependent不再是一个可观察的,我期待它不受影响。

这是故意的吗?如果是这样,这背后的理由是什么?不应该将依赖的可观察量排除在映射之外吗?

这个问题的原因是,我使用ko.mapping.toJS()将vm转换为JavaScript object(根据需要提供dependent属性)

然后,过了一段时间,我正在使用ko.mapping.fromJS(),如上所示。此组合将覆盖vm的ko.computed()属性。

我能提出的解决方案:

  • 在映射过程中明确指定要忽略的dependent

    ko.mapping.fromJS({base: "hello", dependent: "hi"}, {'ignore': "dependent"]}, vm)
    
  • dependent可写(仅限同名)

    this.dependent = ko.computed({
        read: function() {
            return this.base() + ", computed";
        },
        write: function() {},
        owner: this 
    });
    

混杂。信息

  • The Line实际上覆盖了dependentObservable()(据我所知)

0 个答案:

没有答案