我正在使用summernote api(http://summernote.org/#/deep-dive),并使用onkeyup的回调如下:
$('#summernote').summernote({
height: 150,
onkeyup: myFunction
});
表示html:
<textarea id="summernote"></textarea>
我将myFunction定义为......
var myFunction= function(e) {
var num_chars = $(e.target).text().length
console.log(num_chars);
}
现在我想将.bind()的一些参数传递给myFunction。 当我做的时候
onkeyup: myFuntion.bind(1,2)
$(this)或e.target不起作用,这可能与使用.bind()
时params的混乱方式有关。如何使用bind?
维护e.target功能并将额外数据传递给函数任何帮助都将不胜感激。
答案 0 :(得分:1)
您不能以这种方式使用bind
。您试图从函数的右侧部分应用参数(因为您希望第一个参数成为事件)。此外,bind(1, 2)
将this
设置为1
并将2
传递给调用的函数。 看起来就像你想要这样的东西:
onkeyup: _.partialRight(myFunction, 1, 2);
function myFunction(event, data1, data2) {
var numChars = $(e.target).text().length;
console.log(numChars);
}
但是,你可能会失去this
绑定。如果你想保留它,你应该再次使用bind
,但是像这样:
onkeyup: _.partialRight(myFunction.bind($), 1, 2); // This will bind this to $
function myFunction(event, data1, data2) {
var numChars = this(e.target).text().length; // because this is $
}
这个例子中的 _
是lodash。
你这样做的原因(并且你不能使用bind)是因为bind部分适用于 left 。这意味着它会将您的参数首先传递给,然后在调用时传递给bound函数的任何参数将在之后传递。换句话说,使用原始设置,您可以得到:
myFunction(2, event); // "this" is 1
而不是你想要的,这是:
myFunction(event, 1, 2); // "this" is undefined behaviour
要做到这一点,您只需要部分应用上面的功能,这将为您提供所需的行为。我们使用partialRight
的原因是因为这会导致首先应用传递给调用函数的所有参数,然后将参数传递给bind。如果你没有使用partialRight
而是使用partial
,那么你会得到这个:
myFunction(1, 2, event); // "this" is undefined behaviour
此位可能有点超出您的范围
bind
将函数的ThisBinding设置为提供的this
。传递的任何额外参数部分应用(从左侧)到函数,然后返回结果函数。这意味着下次调用结果函数时,它将调用您在bind中提供的ThisBinding的函数,以及您在bind中提供的参数,以及您作为welll传递的任何EXTRA参数
答案 1 :(得分:1)
我进一步审核了API文档,我认为答案可能位于提供的eventHandler()
方法中。
您可以访问bindKeyMap(layoutInfo, keyMap)
,其中keyMap
是对象。
也许类似于:$.summernote.eventHandler.bindKeyMap();
会给出你需要的东西吗?