Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 淘汰:可以在没有参数的情况下调用可观察的扩展程序吗?_Javascript_Knockout.js - Fatal编程技术网

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

Javascript 淘汰:可以在没有参数的情况下调用可观察的扩展程序吗?,javascript,knockout.js,Javascript,Knockout.js,在Knockout.js中,调用可观察扩展程序的典型语法如下: this.myObservable = ko.observable('foo').extend({myExtenderKey: myExtenderOption}); 但是,如果我有一个不带参数的扩展器呢?例如,一个简单的记录器可能不需要任何参数。自动更新的“hasChanged”标志也不会出现 大多数示例只传递一个未使用的布尔值: this.myObservable = ko.observable('foo').extend({

在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扩展器,即使它永远不应该被发送

有没有一种方法可以调用不包含额外参数的扩展器?

查看它,现在似乎不是这样。只需要一个拉动请求,事情就是这样运作的

但是,您可以做的是更新扩展器,使其真正符合布尔值:

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.
  };
}

这似乎是确保透明度的最佳方式;我会继续用这个。