2012-04-17 11 views
8

Questo codice non ha molto contesto, ma illustrerà la mia domanda. È una vista Backbone definita in un modulo AMD che utilizzo per caricare tramite require.jsAggiunta di eventi backbone.js dopo l'inizializzazione

In sostanza, voglio essere in grado di aggiungere eventi a una vista Backbone dopo l'esecuzione dell'inizializzazione. Al momento sto creando un oggetto eventi vuoto, quindi in un metodo chiamato addView, aggiungo un evento ogni volta che viene chiamata la funzione. Al momento non funziona.

Non sono sicuro in quale momento sono registrati gli eventi, ma sospetto che in qualche modo devo ottenere la vista per aggiornare i listener quando l'oggetto events cambia?

Qualcuno sa come posso ottenere l'aggiunta di eventi a un Backbone.js dopo l'inizializzazione?

define([ 
    'jQuery', 
    'Backbone'], 

    function ($, Backbone) { 

     var contentViews = new Array(); 

     var SlidePanelView = Backbone.View.extend({ 

      events: {}, 

      /// <param name="targetDataAtt">The unique value inside the target's Data-Slide-Panel-Id attribute</param> 
      /// <param name="event">Backbone event to trigger view</param> 
      /// <param name="destroyOnRemove">True to destroy view when removed, False otherwise (Default true)</param> 
      addView: function (targetDataAtt, event, view, destroyOnRemove) { 
       destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true; 

       this.events[event] = "viewEventFired"; 
       contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove }; 
      }, 

      viewEventFired: function (e) { 

       var target = $(e.target); 
       var id = target.attr('data-slide-panel-id'); 
       console.log(id); 
      } 

     }); 

     // Return a singleton?? 
     return new SlidePanelView; 


    }); 

risposta

11

Se ho la comprensione correttamente alla domanda, dopo aver aggiunto ulteriori eventi al eventi hash, chiamare delegateEvents() sulla vista di ri-bind eventi.

addView: function (targetDataAtt, event, view, destroyOnRemove) { 
     destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true; 
     this.events[event] = "viewEventFired"; 
     this.delegateEvents(); 
     contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove }; 
    } 

Essa non associare tutti i binding di eventi esistenti e rebinds tutti gli eventi negli eventi hash di nuovo, e io non sono sicuro che i problemi di prestazioni delle sottostanti di farlo, ma la sua qualcosa di essere a conoscenza.

Problemi correlati