覆盖继承的Backbone.js视图的事件哈希

tro*_*ino 4 javascript backbone.js

我有一个Backbone View,用于特定元素将继承的一般元素.我有需要应用于所有元素的事件处理逻辑,以及特定于子类型元素的事件处理逻辑.我遇到了麻烦,因为子View有一个也由父View处理的事件的回调,因此当我尝试在两者中使用事件哈希时,永远不会调用子回调或父回调.让我用一些代码来说明:

var ElementView = Backbone.View.extend({
  events: {
    "mouseup": "upHandler",
    "mousedown": "downHandler",
    "mousemove": "moveHandler"
  },

  initialize: function() {
    // add events from child
    if (this.events)
      this.events = _.defaults(this.events, ElementView.prototype.events);

    this.delegateEvents(this.events);
  }
});

var StrokeView = ElementView.extend({
  events: {
    "mousemove": "strokeMoveHandler"
  }
});
Run Code Online (Sandbox Code Playgroud)

我将如何以可扩展的方式解决这个问题,特别是如果我以后会有另一个级别的继承?

Arn*_*kas 8

处理此问题的一种方法是对事件使用"名称空间":

var ElementView = Backbone.View.extend({
  events: {
    "mouseup.element": "upHandler",
    "mousedown.element": "downHandler",
    "mousemove.element": "moveHandler"
  },

  initialize: function() {
    // add events from child
    if (this.events)
      this.events = _.defaults(this.events, ElementView.prototype.events);

    this.delegateEvents(this.events);
  }
});

var StrokeView = ElementView.extend({
  events: {
    "mousemove.strokeview": "strokeMoveHandler"
  }
});
Run Code Online (Sandbox Code Playgroud)

实际上,Backbone.js文档中提出了这种方法.