在骨干视图中绑定多个事件类型

ste*_*uss 27 javascript backbone.js backbone-events backbone-views

我想知道是否有可能在一条线路内绑定主干中的多个事件类型.

考虑以下:

var MyView = Backbone.View.extend({
    id: 'foo',
    events: {
        'click .bar': 'doSomething',
        'touchstart .bar': 'doSomething'
    },
    doSomething: function(e) {
        console.log(e.type);
    }
});
Run Code Online (Sandbox Code Playgroud)

基本上我想知道的是,是否可以将'click'和'touchstart'的事件绑定组合成一行 - 沿着以下行:

events: { 'click,touchstart .bar': 'doSomething' }
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激.

rin*_*.io 18

视图jQuery事件是不可能的,它们受到约束delegateEvents.但是,骨干事件可能的:

book.on("change:title change:author", ...);
Run Code Online (Sandbox Code Playgroud)


ste*_*uss 15

对于任何有兴趣的人,我最终都delegateEvents在Backbone.View中重写.

只有少数修改的行可以获得所需的功能.

您可以在github上的提交中看到差异

这是delegateEvents处于修改状态:

delegateEvents: function(events) {
    if (!(events || (events = getValue(this, 'events')))) return;
    this.undelegateEvents();
    for (var key in events) {
        var method = events[key];
        if (!_.isFunction(method)) method = this[events[key]];
        if (!method) throw new Error('Method "' + events[key] + '" does not exist');
        var match = key.match(delegateEventSplitter);
        var eventTypes = match[1].split(','), selector = match[2];
        method = _.bind(method, this);
        var self = this;
        _(eventTypes).each(function(eventName) {
            eventName += '.delegateEvents' + self.cid;
            if (selector === '') {
              self.$el.bind(eventName, method);
            } else {
                self.$el.delegate(selector, eventName, method);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)