2012-10-29 19 views
14

In Backbone Marionette, si possono fare cose molto simili con trigger ed eventi:Qual è la differenza tra trigger ed eventi in backbone?

trigger:

return Marionette.Layout.extend({ 
    triggers: { 
     'click .something': 'view:handleClickSomething' 
    }, 

    initialize: function(){ 
     this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething); 
    }, 

    handleClickSomething: function(){} 
} 

eventi vs.:

return Marionette.Layout.extend({ 
    events: { 
     'click .something': 'view:handleClickSomething' 
    }, 

    handleClickSomething: function(ev){} 
} 

Il modo in cui gli eventi mi sembra un modo più veloce più facile e rende anche più facile ottenere l'evento vero e proprio (dato che viene passato automaticamente). C'è un motivo per usare l'uno sull'altro? Quali sono i casi di utilizzo previsto? Avendo difficoltà a trovare molte informazioni su questo online (diverso dal tentativo di ingannare la fonte annotata) ...

(Ho appena scoperto il metodo degli eventi, e fino ad ora ho utilizzato i trigger per tutto poiché pensavo che fosse il solo modo)

risposta

15

Il tuo primo esempio è un cattivo uso dei trigger. I trigger sono pensati per essere scorciatoie per l'attivazione di un evento dalla vista, in modo che un oggetto esterno possa catturare l'evento, non la vista che ha attivato l'evento.

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-events-from-dom-events/

+3

Questo non sembra che risponda effettivamente alle domande come richiesto, ad es. "Un trigger è ___, mentre un evento è ___." Per me è chiaro che un trigger innesca un evento, ma anche un evento, quindi questa risposta non ha chiarito nulla. – meetalexjohnson

4

Se pensiamo sia events e triggers come oggetti JavaScript, quindi qui è la differenza:

Evento esempio:

events: { 
    'click hi': 'alertTitle', 
}, 

alertTitle: function() { 
    alert('Title!!'); 
} 

In ogni caso, il tasto ('click h1') è sempre un evento DOM e un selettore jQuery, il valore ('alertTitle') è sempre th Il nome di una funzione di callback, esistente all'interno della vista.

trigger Esempio:

triggers: { 
    'click h1': 'alert:title' 
}, 

In ogni trigger, la chiave è ancora un evento DOM e un selettore jQuery, ma il valore ('alert:title') è sempre il nome di un nuovo evento che si desidera innescare. Questo gestore di eventi può essere definito ovunque, non necessariamente all'interno della vista corrente.

Trigger è utile quando:

  1. volete che il vostro evento DOM al fuoco di un evento burattino, invece di chiamare una funzione di callback;
  2. Si desidera che il gestore dell'evento Marionette si trovi in ​​un punto diverso dalla vista corrente, ad esempio la vista padre. In questo caso, il genitore di questa vista può avere la funzione onChildviewAlertTitle() per gestire questo evento alert:title.
+1

Riconosco che l'attivazione di 'alert: title' attiva sempre il metodo 'onAlertTitle' (capitalizza e aggiunge il prefisso' on '). Significa che i 'trigger 'non solo espongono l'evento alla vista genitore, ma cercano anche di eseguire il proprio mentod. E modo oppozite - 'eventi: {'click hi': 'alert: title'}' - farà lo stesso. – iegik

Problemi correlati