9

在创建可观察对象后,我在向可观察对象添加淘汰赛扩展程序时遇到问题。在以下示例中,foo每次值按预期更改时都会运行扩展程序,但在第一次调用时只运行一次 for 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/

4

1 回答 1

8

您遇到的问题是扩展程序正在创建一个新的可观察对象(基于它正在扩展的可观察对象)。并且在您第二次调用extend.

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

换句话说,self.bar =在你的最后一行之前添加这样的:

self.bar = self.bar.extend({ numeric: 1 });
于 2013-06-15T04:05:00.397 回答