淘汰赛:可以在没有参数的情况下调用可观察的扩展器吗?

时间:2015-02-06 17:32:16

标签: javascript knockout.js

在Knockout.js中,调用可观察扩展器的典型语法如下:

this.myObservable = ko.observable('foo').extend({myExtenderKey: myExtenderOption});

但是,如果我有一个没有参数的扩展器怎么办?例如,一个简单的记录器可能不需要任何参数。也不会自动更新' hasChanged'标志。

野外的大多数示例都只传递一个未使用的布尔值:

this.myObservable = ko.observable('foo').extend({logsChanges : true});

这看起来不错,因为天真的读者会猜测正在激活logsChanges行为。但布尔值具有误导性,因为以下内容也有效:

this.myObservable = ko.observable('foo').extend({logsChanges : false});

我们也可以传递一个空值,但似乎有点多余:

this.myObservable = ko.observable('foo').extend({logsChanges : null});

这也意味着参数可能被发送到logsChanges扩展器,即使它永远不应该发送。

有没有办法调用一个不包含额外参数的扩展器?

1 个答案:

答案 0 :(得分:1)

目前看来the source for extend似乎并非如此。提出拉动请求,这就是事情的运作方式。

然而,你可以做的是更新你的扩展器以实际遵守布尔值:

function logsChanges(target, shouldLog) {
  if (!shouldLog) return target;
  // Alternatively, you could return `false`
  // but returning `target` is more explicit
  return function loggingHandler() {
    // Log changes and update here.
  };
}