2012-03-27 64 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