2013-06-10 27 views
5

Mam problem z wydarzeniami JQuery w jednym z widoków Backbone.Marionette. Zdefiniowałem niektóre zdarzenia związane z kliknięciem i klawiaturą. Ale niektóre z nich nie działają. Na przykład chcę, aby funkcja pobierania była wywoływana za każdym razem, gdy wyzwalane jest zdarzenie keyup.Zdarzenie keyup nie jest odpalane - kręgosłup

Tak oto kod:

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')); 
     } 
     } 
    }); 
    } 

});

Ale zdarzenie typu keyup nie zostanie nigdy wyrzucone. Próbowałem też z "zmianą", która również nie działa. Kiedy używam "keydown" lub "keypress" zamiast tego wszystko jest w porządku, a funkcja pobierania jest wywoływana poprawnie.

Próbowałem też powiązać zdarzenie do tego wejścia-pole ręcznie w initialize-funkcji z

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

Ale nie jest to też działa. Działa tylko wtedy, gdy wiążę zdarzenie z polem wejściowym w moim pliku podkreślenia-szablonu. Ale to nie może być rozwiązanie.

Czy ktoś ma pojęcie, jaki może być problem?

+0

Czy jest możliwe, że program obsługi dołączony do pola za pośrednictwem 'typeahead()' chwyta 'keyup' i uniemożliwia jego propagowanie? – ebohlman

+0

nie, który również nie działa, usunąłem inicjalizację pola typu głowica i ponownie wypróbowałem zdarzenie keyup – crebuh

Odpowiedz

7

Mogę wymyślić tylko jeden powód tego. A to:

input#citySearch nie należy do przedmiotu itemView. Oznacza to, że jesteś NOT binding swojej funkcji pobierania do keyup zdarzenia wewnątrz elementu kontenera w widoku.

Jeśli chcesz powiązać coś poza swoim widokiem, możesz wywołać zdarzenie w widoku, w którym znajduje się element.