Javascript 主干:扩展delegateEvents方法
在主干中,我想扩展主干.View.prototype.delegateEventsJavascript 主干:扩展delegateEvents方法,javascript,backbone.js,prototype,Javascript,Backbone.js,Prototype,在主干中,我想扩展主干.View.prototype.delegateEvents function (events) { if (!(events || (events = getValue(this, 'events')))) return; this.undelegateEvents(); for (var key in events) { var method = events[key]; if (!_.isFuncti
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('Event "' + events[key] + '" does not exist');
var match = key.match(eventSplitter);
var eventName = match[1], selector = match[2];
method = _.bind(method, this);
eventName += '.delegateEvents' + this.cid;
if (selector === '') {
this.$el.bind(eventName, method);
} else {
this.$el.delegate(selector, eventName, method);
}
}
}
在其中添加一个附加函数。这是一种在不完全覆盖原型的情况下扩展原型的方法吗
在我的例子中,我试图访问事件
arg
编辑:我正试图实现这一目标
function (events) {
if (events['rightclick .element']){ App.doStuff() }
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('Event "' + events[key] + '" does not exist');
var match = key.match(eventSplitter);
var eventName = match[1], selector = match[2];
method = _.bind(method, this);
eventName += '.delegateEvents' + this.cid;
if (selector === '') {
this.$el.bind(eventName, method);
} else {
this.$el.delegate(selector, eventName, method);
}
}
}
如果您刚开始想要一些东西,那么您可以这样做:
var delegateEvents = Backbone.View.prototype.delegateEvents;
Backbone.View.prototype.delegateEvents = function(events) {
// You have to do this here because delegateEvents rarely
// gets the events from its argument, they almost always
// come from this.events.
if(!(events || (events = _(this).result('events'))))
return;
// Now do your special stuff.
if(events['rightclick .element'])
App.doStuff();
// And chain it off to the original implementation. We'll
// always supply the events argument here since we've already
// done the "is it passed or in this?" logic up above.
delegateEvents.call(this, events);
};
请注意,这与较早的getValue
内部函数所做的操作相同
演示:
此外,我不知道有什么
右键单击事件,但如果需要的话。(1)您必须替换整个内容,但可以链接到标准实现。(2) events
并不总是events
参数,有时它是this.events
或this.events()
,因此是标准实现中的第一行。(3) 你到底想完成什么?可能有一种更简单的方法。我对如何链接这一点很感兴趣,但是,我想在这个方法中添加一个条件,用于从events
obj运行一些其他函数的事件(例如:右键单击)。添加了一个我尝试执行的简化示例,我希望它出现在原型中,因为它需要应用于视图的所有实例,并且在这种情况下无法生成baseView
。这工作非常完美,我不认为可以像这样链接函数。谢谢