为什么这个Ti.UI.WebView.fireEvent()调用在侦听器出现时抛出异常?

时间:2012-12-08 20:25:07

标签: events webview titanium

我用

创建一个新窗口
var win = Ti.UI.createWindow({url:'page.js'});
win.listeners = {
   'type': function(e){ alert('test'); }
}
win.open();

在page.js中,我将指定的侦听器添加到窗口内的Ti.UI.WebView中。

for (var type in win.listeners) {
    Ti.API.info(win.listeners[type])
    webView.addEventListener(type, win.listeners[type]);
}

Ti.API.info(win.listeners ['type'])将该函数打印为“< KrollCallback:0xb272160>”

如果没有侦听器,则对we​​bView.fireEvent('type')的调用执行正常。但是如果我像上面那样向webView添加监听器,则对fireEvent的调用会抛出异常。

什么是KrollCallback?如果有侦听器,为什么fireEvent会崩溃?

1 个答案:

答案 0 :(得分:0)

问题是使用url:'page.js'和createWindow()会启动一个新的上下文。如果page.js是这样的话,这种类型的设置将起作用:

exports.getWindow(config) {

   var webView = Ti.UI.createWebView({});

   for (var type in config.listeners) {
      webView.addEventListener(type, config.listeners[type]);
   }
}

然后,使用如下窗口:

var win = require('page').getWindow({
   listeners = {
      'event_type': function(e){ alert('event_type test'); }
   }
});

win.open();