Как добавить динамические события для просмотра? - PullRequest
18 голосов
/ 30 июня 2011

Как я могу добавить динамические события в моем классе представления в Backbone.js

У меня есть класс просмотра с

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'} не просыпается.

кто-нибудь знает решение?

Спасибо, Rohan

Ответы [ 2 ]

18 голосов
/ 30 июня 2011

Backbone автоматически делегирует события из атрибута событий вашего представления. Вы переопределяете ранее делегированные события. Вы можете позвонить $ (this.el) .delegate (...), но вы также можете сделать

this.delegateEvents(_.extend(this.events, {'click select': 'changeSelect'}));
2 голосов
/ 25 октября 2012

Поскольку я много этим занимаюсь, вот мое крошечное расширение Backbone (на основании ответа Жюльена и моего тестирования):

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...