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

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

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

在野外的大多数示例只是传递一个未使用的 bool(boolean) 值:
this.myObservable = ko.observable('foo').extend({logsChanges : true});

这看起来不错,因为幼稚的读者会猜测logsChanges行为正在被激活。但是 bool(boolean) 值具有误导性,因为以下内容也可以起作用:
this.myObservable = ko.observable('foo').extend({logsChanges : false});

我们也可以传递一个空值,但似乎有点多余:
this.myObservable = ko.observable('foo').extend({logsChanges : null});

这也暗示着一个参数可能会被发送到logsChanges扩展器,即使它永远不会被发送。

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

最佳答案

查看the source for extend ,目前看来并非如此。除非有拉取请求,否则事情就是这样。

但是,您可以做的是更新扩展程序以实际使用 bool(boolean) 值:

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

关于javascript - knockout :可以在没有参数的情况下调用可观察的扩展程序吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28371477/

10-12 13:08
查看更多