keyup事件没有解雇 - 主干

时间:2013-06-10 12:14:34

标签: events backbone.js bind marionette keyup

我的Backbone.Marionette Views中的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永远不会被解雇。我也用“改变”-event尝试了它,它也没有用。当我使用“keydown”或“keypress”代替时,一切都很好,并且正确调用了fetch函数。

我还尝试使用

在initialize-function中手动将事件绑定到该输入字段
    $('input#citySearch').bind('keyup',function() {
        console.log('keyup');
    });

但这也行不通。它只有在我将事件绑定到下划线模板文件中的输入字段时才有效。但那可能不是解决方案。

有人知道问题可能是什么吗?

1 个答案:

答案 0 :(得分:9)

我只想到一个原因。那就是:

input#citySearch不属于您的itemView。这意味着您在视图的容器元素内未绑定您的获取函数到keyup事件。

如果要绑定到视图之外的某些内容,可以触发该元素所在的View的事件。