Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 敲除映射覆盖计算的观测值,这是故意的吗?_Javascript_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Javascript 敲除映射覆盖计算的观测值,这是故意的吗?

Javascript 敲除映射覆盖计算的观测值,这是故意的吗?,javascript,knockout.js,knockout-mapping-plugin,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(); 此时,vm是对象{base:observable(),dependent:depen

例如,您有如下设置:

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

var vm = new model();
此时,
vm
对象{base:observable(),dependent:dependentObservable()}
(如预期的那样)

但是,一旦我跑步:

ko.mapping.fromJS({base: "hello", dependent: "hi"}, {}, vm)
vm
变成
Object{base:observable(),依赖:“hi”,\uuuuu ko\u mapping\uuuuuu:Object}

dependent
不再是可观察的,我希望它不会被触及

这是故意的吗?如果是,这背后的理由是什么?相依观测值不应该被排除在映射之外吗


这个问题的原因是,我正在使用ko.mapping.toJS()将
vm
转换为一个JavaScript
对象
(正如预期的那样,它提供了一个
依赖的
属性)

然后,稍后,我将使用ko.mapping.fromJS(),如上所示。此组合覆盖了
vm
的ko.computed()属性


我可以想出以下解决方案:

  • 显式指定映射过程中要忽略的
    相关

    ko.mapping.fromJS({base: "hello", dependent: "hi"}, {'ignore': "dependent"]}, vm)
    
  • 使
    相关
    可写(仅适用于同名者)


杂项。信息

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

这是精心设计的。下面是另一个解决方案:。它使用mapping create函数来添加computed.As@WayneEllery已经提到,这是出于设计(或缺少的功能)。映射插件只检查属性是否是可写的可观察对象,然后更新其值。如果该属性不是可写的可观察属性,它只需使用新值完全覆盖该属性(这发生在不可写的计算机上)。因此,正确的解决方案是忽略配置中的计算属性。@nemesv:这一点很好,非常感谢!我想我们已经找到了为什么它会这样的原因。您是否有任何指向定义此行为的文档的链接(或者我们只是这样做)?我问这个问题是因为“物体的所有属性都被转换成可观察的。”在“事物是如何映射的”下。我和敲除一起工作了4年,我永远不会使用ko.mapping。它真的很臃肿,几乎从来没有得到结果。最快的方法是实现一个函数,该函数将接受JS对象并返回带有绑定的模型。
this.dependent = ko.computed({
    read: function() {
        return this.base() + ", computed";
    },
    write: function() {},
    owner: this 
});