Backbone.Marionette ビューの 1 つで JQuery イベントに問題があります。いくつかのクリック イベントとキーボード イベントを定義しました。しかし、それらのいくつかは機能していません。たとえば、keyup イベントがトリガーされるたびに fetch-function が呼び出されるようにします。
コードは次のとおりです。
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 は決して発生しません。「変更」イベントでも試しましたが、これも機能していません。代わりに「keydown」または「keypress」を使用すると、すべて問題なく、フェッチ関数が正しく呼び出されます。
また、初期化関数でイベントをその入力フィールドに手動でバインドしようとしました
$('input#citySearch').bind('keyup',function() {
console.log('keyup');
});
しかし、これも機能していません。アンダースコア テンプレート ファイル内の入力フィールドにイベントをバインドする場合にのみ機能します。しかし、それでは解決できませんでした。
問題が何であるかを知っている人はいますか?