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)
我将如何以可扩展的方式解决这个问题,特别是如果我以后会有另一个级别的继承?
处理此问题的一种方法是对事件使用"名称空间":
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文档中提出了这种方法.