2012-08-03 82 views
1

我在重寫jQuery代碼到主幹的過程,但我被困在一個看似微不足道的問題:在Backbone View的委託事件中,如何訪問事件的源元素?

中的元素上的事件回調這是最主要的視圖元素的孩子,我該如何訪問特定的子被點擊的元素(例如)?

var Composer = Backbone.View.extend({ 
    events: { 
     "click #postnow": "postnow" 
    }, 
    postnow: function(){ 
     // @fixme: 
     var btn = $("#postnow"); 
     // Do something 
    } 
}); 

new Composer({el: $('.composer')}); 

在jQuery中,我會用$(this),但在骨幹它是指View元素,而不是點擊的孩子。

有沒有辦法做到這一點,而無需再次明確指定選擇器?

+0

可能重複(http://stackoverflow.com/questions/10077961/backbone-view-event-getting-the-proper-target) – 2012-08-03 16:26:25

+0

@muistooshort不是真的,但感謝鏈接到這個有趣的問題。 – 2012-08-05 12:51:09

回答

4

鑑於回調,你必須更具體地event.currentTarget

訪問jQuery的事件和它們的屬性,嘗試

var Composer = Backbone.View.extend({ 
    events: { 
     "click #postnow": "postnow" 
    }, 
    postnow: function(e){ 
     var btn = $(e.currentTarget); 
    } 
}); 
+0

滾出我的腦海! :P – fguillen 2012-08-03 10:46:30

+0

@fguillen但是你提供了一個小提琴,這個計數:) – nikoshr 2012-08-03 10:47:27

+0

明白了,謝謝!似乎有點令人費解,因爲這樣一個頻繁的情況,但我想知道爲什麼沒有一個骨幹捷徑。 – 2012-08-03 10:49:03

0

一個隱含參數發送到回調函數這個參數是一個jQuery Event Object,它包含大量的信息,包括事件被定位的DOM元素:

var Composer = Backbone.View.extend({ 
    events: { 
     "click #postnow": "postnow" 
    }, 
    postnow: function(event){ 
     console.log("postnow()"); 
     console.log("this", this); 
     console.log("event", event); 
     console.log("target", event.target); 
     console.log("data-value", $(event.target).attr("data-value")); 
    } 
}); 

檢查[查看骨幹事件得到適當的目標]的working jsFiddle