使用 Dojo lang.hitch 将参数传递给被调用函数
Passing a parameter into called function using Dojo lang.hitch
我在 ESRI 的 Web AppBuilder 环境中使用 dojo(它使用 ESRI Javascript 3.x API)。
无论如何,我创建了一个按钮,在按钮的 onClick 方法中,我希望能够使用 lang.hitch 调用另一个函数(以将函数保留在范围内)。但是被调用的函数是带参数的,我好像传不进去,只能调用函数,像这样。
this.myDialogBtn1 = new Button({
label: "Create New Location",
disabled: false,
onClick: lang.hitch(this, this._createNewLocation)
}).placeAt(this.createNewLoc)
当然,我的 _createNewLocation 函数需要带一个参数,就像这样。
_createNewLocation(param){...do stuff}
我不确定如何将该参数传递给 onClick 方法。仅仅添加这样的参数是行不通的。它抛出类型错误。有什么想法吗?
lang.hitch(this, this._createNewLocation(param))
只需绑定参数
onClick: lang.hitch(this, this._createNewLocation.bind(this,param));
这会将参数作为第一个参数传递给函数,this
也是您绑定函数的上下文
正如在下面的评论中指出的那样,hitch 是 bind 的 dojos 实现,然后也应该采用参数,但如果是这种情况,您甚至不需要使用 hitch,只需调用
onClick: this._createNewLocation.bind(this,param);
如果您使用 lang.hitch
,则无需使用 bind
。只需将参数作为第三个参数传递即可。 前两个参数之后提供的任何参数都将传递给函数。
onClick: lang.hitch(this, this._createNewLocation, param);
如果您愿意,可以使用普通 bind()
方法:
onClick: _createNewLocation.bind(this, param);
myObject.prototype._createNewLocation = function(param, evt) {
console.log(param, evt);
}
我在 ESRI 的 Web AppBuilder 环境中使用 dojo(它使用 ESRI Javascript 3.x API)。
无论如何,我创建了一个按钮,在按钮的 onClick 方法中,我希望能够使用 lang.hitch 调用另一个函数(以将函数保留在范围内)。但是被调用的函数是带参数的,我好像传不进去,只能调用函数,像这样。
this.myDialogBtn1 = new Button({
label: "Create New Location",
disabled: false,
onClick: lang.hitch(this, this._createNewLocation)
}).placeAt(this.createNewLoc)
当然,我的 _createNewLocation 函数需要带一个参数,就像这样。
_createNewLocation(param){...do stuff}
我不确定如何将该参数传递给 onClick 方法。仅仅添加这样的参数是行不通的。它抛出类型错误。有什么想法吗?
lang.hitch(this, this._createNewLocation(param))
只需绑定参数
onClick: lang.hitch(this, this._createNewLocation.bind(this,param));
这会将参数作为第一个参数传递给函数,this
也是您绑定函数的上下文
正如在下面的评论中指出的那样,hitch 是 bind 的 dojos 实现,然后也应该采用参数,但如果是这种情况,您甚至不需要使用 hitch,只需调用
onClick: this._createNewLocation.bind(this,param);
如果您使用 lang.hitch
,则无需使用 bind
。只需将参数作为第三个参数传递即可。 前两个参数之后提供的任何参数都将传递给函数。
onClick: lang.hitch(this, this._createNewLocation, param);
如果您愿意,可以使用普通 bind()
方法:
onClick: _createNewLocation.bind(this, param);
myObject.prototype._createNewLocation = function(param, evt) {
console.log(param, evt);
}