2011-07-20 82 views
9

我有兩個視圖,爲了簡單起見父母/孩子。孩子正在使用觸發器來發起事件。我沒有看到它在父母的處理程序中。以下有效嗎?Backbone.JS兒童視圖中的自定義事件

var parent = Backbone.View.extend({ 
    events: { "childevent": "run" }, 
    run: function(e) { 
     console.log(e); 
    }, 
    render: function() { /* render the child here */ } 
}); 

var child = Backbone.View.extend({ 
    someAction: function() { this.trigger('childevent'); } 
}); 

回答

18

想通了! $(this.el).trigger('childevent');作品。

+0

感謝您發佈您的解決方案! – Kirk

+0

$()包裝是我錯過了。謝謝! – gthmb

+3

你也可以試試這個。$ el用於緩存的jQuery屬性 – Gus

2

應該不是events: { "childevent": "run" }而是?沒有辦法在代碼中訪問這個地方的實際匿名函數。

+0

我確實有過,但是它仍然不起作用,我只是在這裏輸入了錯誤。接得好。 –

2

Backbone在this.$el屬性中存儲對視圖節點的jQuery引用,因此您可以使用它來節省一些性能,而不是通過$(this.el)重新計算引用。

// use "this.$el.trigger()" to refer to jQuery's object 
this.$el.trigger('childevent'); 
1

顯然晚了,但對於其他人誰遇到這樣的:

在視圖中的事件屬性是從元器件的意見EL或$ EL元件內自動結合HTML DOM事件,而語法包含了一個UI事件,並選擇在對的密鑰:

事件:{「點擊#someButton」,「clickHandler事件」}

要收聽來自其他模型或視圖的事件,你用這個。 listenTo(target,.....)

相關問題