0

我创建一个新窗口

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>”

如果没有侦听器,则对 webView.fireEvent('type') 的调用可以正常执行。但是如果我像上面那样向 webView 添加侦听器,对 fireEvent 的调用会引发异常。

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

4

1 回答 1

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();
于 2012-12-09T17:37:21.960 回答