2013-04-24 8 views
7

Chiedersi se qualcuno ha trovato un modo migliore per gestire un clic all'esterno di un div durante l'utilizzo di Ember? Conosco il modo jQuery con un gestore di clic globale che è necessario specificare ogni azione da intraprendere per determinate istanze, ma spero che qualcuno abbia trovato un modo per dichiararlo all'interno di una vista Ember. Inoltre, ho provato a dare un indice di tabulazione div e usare l'opzione a sfocatura, ma le azioni di Ember non sembrano consentirlo.Ember - Gestione dei clic all'esterno della vista

+1

non capisco qual è il problema. È possibile delegare l'evento in base a un'espressione regolare, ciò non richiede alcuna follia. Anche dare un'occhiata alla documentazione di Ember.js afferma che l'uso del metodo '.on()' di jQuery è l'approccio che usano per risolvere i problemi di delega lungo ampi sottoinsiemi di elementi, nidificati o meno. – Ohgodwhy

+1

È possibile utilizzare l'evento ['didInsertElement'] (http://stackoverflow.com/questions/11377215/can-i-give-the-view-a-show-up-animation-in-emberjs/11377899#11377899) per avviare un plug-in e cose del genere. E dovresti usare ['willDestroyElement'] (http://emberjs.com/api/classes/Ember.View.html#event_willDestroyElement) per rimuovere i bind. In alternativa puoi usare ['Visualizza # on'] (http://emberjs.com/api/classes/Ember.View.html#method_on). – MilkyWayJoe

risposta

7

Grazie per l'input. Sono tornato indietro e ho letto di nuovo la documentazione su jQuerys .on. Non ero a conoscenza del fatto che si potesse assegnare un nome all'evento. Quindi ho preso entrambi i commenti e li ho combinati con qualcosa di simile.

didInsertElement: function() { 
    Ember.run.next(this, 'attachClickHandler'); 
}, 

attachClickHandler: function(){ 
    var temp = this; 

    $(window).on("click." + temp.elementId, function (e){ 
     //...event here 
    }); 
}, 

detachClickHandler: function(){ 
    $(window).off("click." + this.elementId); 
}, 

Ciò consente all'evento di essere specifico per ogni istanza di visualizzazione, che è ciò che volevo. Grazie ragazzi!

+2

Suppongo che 'detachClickHandler()' sia chiamato dall''attacco 'willDestroyElement' della vista? – Zaki

+0

Non conoscevo l'evento namespacing :) –

1

si possono trovare ClickElsewhereMixin utile

appena includono il mixin su qualsiasi componente e implementare onClickElsewhere()