钛/合金:将事件监听器添加到窗口

时间:2017-03-21 21:48:03

标签: titanium appcelerator appcelerator-titanium titanium-alloy appcelerator-alloy

我在 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

但是,事件侦听器中的函数似乎没有运行。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

就我而言,我正在使用

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

过去一小时我一直在咂嘴......

除了@PrashantSaini之外,控制器对象上没有addEventListener,控制器具有on函数,所以它应该是:

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

<强>更新

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