2013-06-10 3 views
5

У меня проблема с событиями JQuery в одном из моих объектов Backbone.Marionette. Я определил некоторые события нажатия и клавиатуры. Но некоторые из них не работают. Например, я хочу, чтобы функция fetch вызывалась каждый раз, когда запускается событие keyup.событие keyup не срабатывает - магистраль

Так вот код:

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

});

Но keyup-Event никогда не срабатывает. Я также попробовал его с «change» -event, который также не работает. Когда я использую «keydown» или «keypress», тогда все нормально, и функция fetch вызывается правильно.

Я также попытался связать событие этого входного поля вручную в инициализации-функции с

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

Но это тоже не работает. Он работает только в том случае, если я привязываю событие к полю ввода в моем файле подчёркивания-шаблона. Но это не могло быть решением.

Есть ли у кого-нибудь идеи, в чем проблема?

+0

Возможно ли, что обработчик, прикрепленный к полю через 'typeahead()', захватывает 'keyup' и предотвращает его распространение? – ebohlman

+0

нет, что тоже не работает, я удалил инициализацию поля typeahead и снова попытался активировать keyup-event – crebuh

ответ

7

Я могу придумать только одну причину этого. И это:

input#citySearch не является частью вашего элемента. Это означает, что вы НЕ привязываете вашу функцию fetch к событию keyup внутри элемента контейнера вашего представления.

Если вы хотите связать что-то вне своего вида, вы можете вызвать событие для представления, в котором находится элемент.