2013-06-10 22 views
5

Ich habe ein Problem mit den JQuery-Ereignissen in einer meiner Backbone.Marionette Ansichten. Ich habe einige Klick- und Tastaturereignisse definiert. Aber einige von ihnen arbeiten nicht. Zum Beispiel möchte ich, dass die Fetch-Funktion jedes Mal aufgerufen wird, wenn das Keyup-Ereignis ausgelöst wird.Keyup-Ereignis wird nicht ausgelöst - Backbone

So, hier ist der Code:

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

});

Aber das keyup-Event wird nie ausgelöst. Ich habe es auch mit dem "Change" -Event versucht, was auch nicht funktioniert. Wenn ich stattdessen "keydown" oder "keypress" verwende, ist alles in Ordnung und die Fetch-Funktion wird korrekt aufgerufen.

Ich habe auch versucht mit

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

Aber das ist auch nicht funktioniert das Ereignis zu diesem Eingabefeld manuell in der initialize-Funktion zu binden. Es funktioniert nur, wenn ich das Ereignis an das Eingabefeld innerhalb meiner Unterstrich-Vorlagendatei binde. Aber das könnte nicht die Lösung sein.

Hat jemand eine Idee, was das Problem sein könnte?

+0

Ist es möglich, dass der Handler, der über 'typeahead()' an das Feld angehängt ist, 'keyup' greift und verhindert, dass es sich ausbreitet? – ebohlman

+0

nein, das funktioniert auch nicht, ich habe die Initialisierung des typeahead-Feldes entfernt und das keyup-event erneut versucht – crebuh

Antwort

7

Ich kann nur einen Grund dafür denken. Und das ist:

input#citySearch ist nicht Teil Ihrer itemView. Das heißt, Sie sind NICHT verbindlich Ihre Abruffunktion zu keyup Ereignis innerhalb des Containerelements Ihrer Ansicht.

Wenn Sie an etwas außerhalb Ihrer Ansicht binden möchten, können Sie ein Ereignis für die Ansicht auslösen, in der sich das Element befindet.

Verwandte Themen