映射后应用knockout扩展器

时间:2013-06-07 14:14:32

标签: 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 });
};

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

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

http://jsfiddle.net/LgxTn/

1 个答案:

答案 0 :(得分:8)

你遇到的问题是扩展器正在创建一个新的可观察(基于它正在扩展的可观察对象)。并且在第二次调用extend时没有使用新的可观察量。

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

换句话说,在最后一行前添加self.bar =以获得此内容:

self.bar = self.bar.extend({ numeric: 1 });