淘汰赛:可以在没有参数的情况下调用可观察扩展程序吗?
Knockout: can observable extenders be called without parameters?
在Knockout.js中,调用可观察扩展器的典型语法如下:
this.myObservable = ko.observable('foo').extend({myExtenderKey: myExtenderOption});
但是,如果我有一个不带参数的扩展器怎么办?例如,一个简单的记录器可能不需要任何参数。自动更新 'hasChanged' 标志也不会。
大多数实际示例只是传递一个未使用的布尔值:
this.myObservable = ko.observable('foo').extend({logsChanges : true});
这看起来不错,因为天真的 reader 会猜测 logsChanges
行为正在被激活。但布尔值具有误导性,因为以下内容也有效:
this.myObservable = ko.observable('foo').extend({logsChanges : false});
我们也可以传递一个空值,但似乎有点多余:
this.myObservable = ko.observable('foo').extend({logsChanges : null});
这也意味着参数 可能 被发送到 logsChanges 扩展器,即使它永远不应该被发送。
有没有一种方法可以调用不包含额外参数的扩展程序?
从 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.
};
}
在Knockout.js中,调用可观察扩展器的典型语法如下:
this.myObservable = ko.observable('foo').extend({myExtenderKey: myExtenderOption});
但是,如果我有一个不带参数的扩展器怎么办?例如,一个简单的记录器可能不需要任何参数。自动更新 'hasChanged' 标志也不会。
大多数实际示例只是传递一个未使用的布尔值:
this.myObservable = ko.observable('foo').extend({logsChanges : true});
这看起来不错,因为天真的 reader 会猜测 logsChanges
行为正在被激活。但布尔值具有误导性,因为以下内容也有效:
this.myObservable = ko.observable('foo').extend({logsChanges : false});
我们也可以传递一个空值,但似乎有点多余:
this.myObservable = ko.observable('foo').extend({logsChanges : null});
这也意味着参数 可能 被发送到 logsChanges 扩展器,即使它永远不应该被发送。
有没有一种方法可以调用不包含额外参数的扩展程序?
从 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.
};
}