Backbone.js用于查看的多个delegateEvents

Backbone.js用于查看的多个delegateEvents,backbone.js,Backbone.js,关于视图中delegateEvents的快速问题-我们可以在单个事件定义中指定多个事件绑定吗 例如,而不是: 'keyup .text-input': 'textEvents', 'keydown .text-input': 'textEvents', 'focusin .text-input': 'textEvents', 'focusout .text-input': 'textEvents', 'click .text-input': 'textEvents', ... 这可能吗 'ke

关于视图中delegateEvents的快速问题-我们可以在单个事件定义中指定多个事件绑定吗

例如,而不是:

'keyup .text-input': 'textEvents',
'keydown .text-input': 'textEvents',
'focusin .text-input': 'textEvents',
'focusout .text-input': 'textEvents',
'click .text-input': 'textEvents',
...
这可能吗

'keyup keydown focusin focusout click .text-input': 'textEvents',

不,你不能那样做。从:

事件以
{“事件选择器”:“回调”}

事件
隐式地是一个单词(就像jQuery和DOM事件一样),而
选择器
可以是任何jQuery样式选择器。此外,
this.events
中的键通过以下方式解析:

因此,
事件
是第一个组件,并且只是第一个组件

您可以自己构建
events
对象,并手动调用
delegateEvents
,如下所示:

var catch  = ['keyup', 'keydown', 'focusin', 'focusout', 'click'];
var events = { };
_(catch).each(function(ev) { events[ev + ' .text-input'] = 'textEvents' });
this.delegateEvents(events);

我制作了一个JSFIDLE来演示它是如何工作的“这太糟糕了,因为jQuery支持它。它只是主干网不支持。也许我会为此向主干网提交一个拉请求。:)@Derick:但它可能会变得丑陋。主干网将密钥分成两部分,这样它就可以
this.$el.delegate(选择器、事件名称、方法)
因此,您必须知道如何提取片段,但在面对自定义事件时,这将是相当困难的;您必须尝试找出CSS选择器的开始位置,而不是识别事件列表。这一点很好。必须有其他标记来区分选择器和事件ne以前遇到过这个问题,并找到了解决方案!这是通过将现有的jQuqery事件处理程序移植到主干网实现的。第一个方法工作得很好,只是试图清理一些代码!:)@crawf:jQuery可以在一个字符串中处理多个事件。问题是主干网将事件和选择器组合在一个字符串中,因此存在错误面对自定义事件和选择器时,没有可靠的方法来分隔两个空格分隔的列表。
var catch  = ['keyup', 'keydown', 'focusin', 'focusout', 'click'];
var events = { };
_(catch).each(function(ev) { events[ev + ' .text-input'] = 'textEvents' });
this.delegateEvents(events);