我为事件show_keyboard
创建了一个监听器。在处理程序中,我需要解除此事件的绑定。在这种情况下,事件是从本机android插件抛出的。
appView.sendJavascript("cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight':" + Integer.toString(keyboardHeight)+"});");
在addHeightHandler
中,我需要this
作为addHeightHandler
的父级才能解除绑定。因此,我在调用self
时传递addHeightHandler
。但是,当我执行此操作时,我无法访问e
和keyboardHeight
属性。
注意:我的雇主坚持认为必须这样做,没有匿名功能或self
变量的全局设置
/*
* When keyboard is shown, add height of keyboard to body to make scrollable.
*/
this.addHeightHandler = function (e) {
keyboardHeight = e.keyboardHeight;
//e is undefined
//do some stuff to add keyboard height
window.removeEventListener('show_keyboard', this.addHeightHandler);
};
/*
* Listen for showkeyboard events thrown by native code on Android
*/
this.addKeyboardListeners = function () {
var self = this;
window.addEventListener('native.showkeyboard', function () {
self.addHeightHandler(self)
}, false);
};
我知道还有其他方法可以做到这一点,但这就是我指示这样做的方式。我相信将self
传递给addHeightHandler
意味着e
会被覆盖,这是正确的吗?
答案 0 :(得分:0)
是,以下内容:
this.addKeyboardListeners = function () {
var self = this;
window.addEventListener(eventConstants.nativeShowKeyboard, function () {
self.addHeightHandler(self);
});
};
将self
作为e
的值传递。
您可以做的是将addHeightHandler
函数绑定到所需的上下文。在addKeyboardListeners
中,您可以:
this.addKeyboardListeners = function () {
var handler = this.addHeightHandler.bind(this);
addEventListener(eventConstants.nativeShowKeyboard, handler);
};
以上所做的是" bind" addHeightHandler
函数到this
的上下文,意味着当它被调用时,函数内的this
关键字将引用绑定它时的this
。
该函数仍将e
作为参数,因此当事件发生且处理程序运行时,e
仍然是事件。