2

Je le code suivant dans index.js:titane/alliage: Ajouter écouteur d'événement à une fenêtre

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

sur foo.js Je donne les résultats suivants:

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

// execute runEvent() somewhere later 

Toutefois, la fonction dans l'écouteur d'événements ne semble pas s'exécuter.

Qu'est-ce que je fais mal?

Répondre

3

Il vous manque un point indiquant que les événements personnalisés ne peuvent être ajoutés que sur un contrôleur et non sur la vue.

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

Dans cette ligne, vous tenez la vue à l'aide getView() dans gagner variable.

Maintenant, il devrait ressembler à ceci:

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 restera même:

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

// execute runEvent() somewhere later 
0

Dans mon cas, j'utilisais

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

J'ai fessée ma tête pendant la dernière heure ...

au-dessus de ce que @PrashantSaini présenté, il s pas addEventListener sur les objets du contrôleur, les contrôleurs ont la fonction on, il devrait donc être:

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

mise à jour

Ma réponse est une tête du fait qu'il n'y addEventListener sur l'objet du contrôleur.

+0

Je ne vois pas comment c'est différent de @Prashant Sainj répondre –

+0

Vérifiez la mise à jour – TheFuquan