如何为视图添加动态事件?

时间:2011-06-30 16:13:52

标签: javascript events backbone.js

如何在Backbone.js的视图类中添加动态事件

我有一个带

的View类
var myViewClass = Backbone.View.extend({
    events: {
        'change select': 'changeSelect',
        'click a.changeLink': 'clearSelect'
    },

    initialize: function() {
        this.delegateEvents({'click select': 'changeSelect'});
    },

    .
    .
    .        
});

这是添加{'click select':'changeSelect'}事件,但不知何故{'click a.changeLink':'clearSelect'}并不是很明智。

有谁知道解决方案?

谢谢, 罗汉

2 个答案:

答案 0 :(得分:18)

Backbone自动委托视图的events属性中的事件。您正在覆盖先前委派的事件。你可以调用$(this.el).delegate(...)但你也可以这样做

this.delegateEvents(_.extend(this.events, {'click select': 'changeSelect'}));

答案 1 :(得分:2)

由于我做了很多,这是我的小骨干扩展(基于Julien的答案和我的测试):

Backbone.View.prototype.addEvents = function(events) {
  this.delegateEvents( _.extend(_.clone(this.events), events) );
};

使用:

BaseResizable.View = Base.View.extend({
  initialize: function() {
    Base.View.prototype.initialize.call(this);
    this.addEvents({
      'resizestop': 'resizeStop'
    });
  },
  resizeStop: function(event, ui){...}
}

如果您使用addEvents(),则必须再次undelegateEvents()