2013-06-10 16 views
5

Ho un problema con gli eventi JQuery in una delle mie viste Backbone.Marionette. Ho definito alcuni eventi relativi a clic e tastiera. Ma alcuni di loro non funzionano. Ad esempio, voglio che la funzione fetch venga chiamata ogni volta che viene attivato l'evento keyup.non viene attivato - backbone

Quindi, ecco il codice:

return Backbone.Marionette.ItemView.extend({ 
    tagName: 'div', 
    template: Template, 
    events:{ 
    'click .yes': 'yes', 
    'click .no': 'no', 
    'keyup #citySearch': 'fetch' 
    }, 
    yes : function() { 
    this.close(); 
    }, 
    no : function() { 
    this.close(); 
    }, 
    initialize: function(){ 
    this.collection = new AreaCollection(); 
    this.collection.on('sync', this.onShow, this); 
    this.sourceArr = []; 
    }, 
    onShow: function() { 
     var that = this; 
     $('#citySearch').typeahead({ 
      source: that.sourceArr 
     }); 
    }, 
    fetch: function(ev) { 
    var that = this; 
    that.collection.fetch({ 
     data : { 
     query : $(ev.currentTarget).val(), 
     type : 'cities' 
     }, 
     success: function(response) { 
     for (var i = 0; i < response.length; i++) { 
      that.sourceArr.push(response.models[i].get('name')); 
     } 
     } 
    }); 
    } 

});

Ma l'evento keyup non viene mai attivato. L'ho provato anche con "change" -event, che non funziona. Quando uso "keydown" o "keypress" invece tutto va bene e la funzione fetch è chiamata correttamente.

Ho anche cercato di legare l'evento a quell'ingresso campo manualmente nella inizializzazione-funzione

$('input#citySearch').bind('keyup',function() { 
     console.log('keyup'); 
    }); 

Ma è anche non funziona. Funziona solo se lego l'evento al campo di input all'interno del mio file di modello di sottolineatura. Ma quella non potrebbe essere la soluzione.

Qualcuno ha un'idea di quale potrebbe essere il problema?

+0

E 'possibile che il gestore collegato al campo tramite 'typeahead()' stia catturando 'keyup' e impedendogli di propagarsi? – ebohlman

+0

no, anche questo non funziona, ho rimosso l'inizializzazione del campo typeahead e ho provato di nuovo l'evento keyup – crebuh

risposta

7

Posso solo pensare a una ragione per questo. E questo è:

input#citySearch non è parte del tuo oggettoView. Ciò significa che sei NON vincolante la tua funzione di recupero per l'evento keyup all'interno dell'elemento contenitore della tua vista.

Se si desidera associare qualcosa all'esterno della propria vista, è possibile attivare un evento nella vista in cui si trova l'elemento.