映射后应用knockout扩展器

sWW*_*sWW 9 javascript knockout.js

我有一个问题,在创建后为可观察者添加一个敲除扩展器.在下面的示例中,扩展器在foo每次值按预期更改时运行,但在第一次调用时仅运行一次bar.

var viewModel = function(){
    var self = this;

    self.foo = ko.observable(1).extend({ numeric: 1 });

    self.bar = ko.observable(1);

    self.bar.extend({ numeric: 1 });
};
Run Code Online (Sandbox Code Playgroud)

本质上,我正在映射一个大型JSON对象,并希望在某些属性发生映射后添加扩展器.有一个简单的方法吗?

下面是一个显示问题的jsfiddle:

http://jsfiddle.net/LgxTn/

Mar*_*nze 8

你遇到的问题是扩展器正在创建一个新的observable(基于它正在扩展的observable).并且在你的第二次电话会议中没有使用新的可观察信息extend.

要解决此问题(不更改扩展程序的代码),您可以响应从调用分配extend 到它所调用的同一属性中.

换句话说,self.bar =在最后一行前添加以便:

self.bar = self.bar.extend({ numeric: 1 });
Run Code Online (Sandbox Code Playgroud)