Titanium/ Alloy:将事件侦听器添加到 window

Titanium/ Alloy: Add event listener to a window

我在index.js中有以下代码:

var win = Alloy.createController('foo').getView();
win.open();
win.addEventListener('exampleEvent', function () {
    Ti.API.info('Event Run!'); // does not seem to run
});

foo.js 我有以下内容:

function runEvent() {
    $.trigger('exampleEvent');
    $.getView().close();
}

// execute runEvent() somewhere later

不过事件监听器中的函数好像没有运行.

我做错了什么?

您遗漏了一点,即自定义事件只能添加到控制器上,不能添加到视图上。

var win = Alloy.createController('foo').getView();

在这一行中,您通过在 win 变量中使用 getView() 来保存视图。

现在应该是这样的:

var win = Alloy.createController('foo');

win.on('exampleEvent', function () {
    Ti.API.info('Event Run!'); // it will run now as you have added custom event on controller (means $ in .js file) itself.
});

// now you can get the top-most view (which is a window in this case) and can further use open() method on window
win.getView().open();

foo.js 将保持不变:

function runEvent() {
    $.trigger('exampleEvent');
    $.getView().close();
}

// execute runEvent() somewhere later

就我而言,我使用的是

var controller = Alloy.createController('myController');
controller.addEventListener("customEvent",function(){});

过去一个小时我一直在拍脑袋...

在@PrashantSaini 介绍的内容之上,控制器对象上没有 addEventListener,控制器具有 on 函数,所以它应该是:

controller.on("customEvent",function(){});

更新

我的回答是在控制器对象上没有 addeventlistener 这一事实。