2012-03-27 61 views
3

有关视图中delegateEvents的快速问题 - 我们可以在单个事件定义中指定多个事件绑定吗?Backbone.js多个代理事件查看

,而不是例如:

'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', 

回答

7

不,你不能这样做。从fine manual

事件写入格式{"event selector": "callback"}

event是隐含一个字(就像在jQuery和DOM的事件),而selector可以是任何jQuery的风格选择。此外,在this.events密钥被解析使用this regex

var delegateEventSplitter = /^(\S+)\s*(.*)$/; 

所以event是第一组分和只有第一个组件。

你可以建立的events反对自己,用手像这样的东西叫delegateEvents

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

我放在一起的jsfiddle演示如何这行不通” http://jsfiddle.net/derickbailey/hFAAC /这太糟糕了,因为jQuery支持它,只是Backbone没有,也许我会向Backbone提交一个pull请求:) – 2012-03-27 03:46:27

+0

@Derick:但它可能会变得丑陋。两个部分,以便它可以'this. $ el.delegate(selector,eventName,method);'所以你必须知道如何提取部分,但这在面对自定义事件时会很困难;你会必须尝试弄清楚在哪里他选择CSS选择器而不是识别事件列表。 – 2012-03-27 03:50:01

+0

好点。必须有一些其他标记来区分选择器和事件 – 2012-03-27 04:01:36