我遇到了在创建后为可观察者添加一个敲除扩展器的问题。在以下示例中,每当值按预期更改时,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 });
};
本质上,我正在映射一个大型JSON对象,并希望在某些属性发生映射后添加扩展器。有一种简单的方法可以做到这一点吗?
下面是一个显示问题的jsfiddle:
答案 0 :(得分:8)
你遇到的问题是扩展器正在创建一个新的可观察(基于它正在扩展的可观察对象)。并且在第二次调用extend
时没有使用新的可观察量。
要解决此问题(不更改扩展程序的代码),您可以将响应从调用extend
分配到名为的同一属性中。
换句话说,在最后一行前添加self.bar =
以获得此内容:
self.bar = self.bar.extend({ numeric: 1 });