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

問題は、createWindow() で url:'page.js' を使用すると、新しいコンテキストが開始されることです。このタイプのセットアップは、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 に答える