0

我有Backbone(Marionette)和jQuery自定義DOM事件問題。Backbone.js - 自定義JQuery事件

我有自定義插件,在文檔上觸發'changed_currency'事件時更新元素的html內容。

$(document).on 
    changed_currency: -> 
    # omitted code 
    $(@).html("some html") 
, '.currency-change' 

這裏沒什麼特別的。它適用於不使用Backbone的頁面。但是,在骨幹視圖中,此代碼根本不起作用(事件未捕獲)。所以我的問題是,我可以從我的Backbone視圖中激發自定義事件嗎?

骨幹代碼:

#omitted code 
ui: 
    currency_change: '.currency_change' 

onRender:() => 
    #omitted code 
    @ui.currency_change.trigger('changed_currency') 

預先感謝幫助。

回答

2

這不起作用,因爲在render函數的Marionette實現的末尾調用了onRender函數。 render函數將視圖的HTML呈現爲不屬於DOM一部分的元素。

直到您實際將其插入到DOM中,掛起document的事件處理程序纔會捕獲您觸發的事件。

如果您正在利用Marionette的區域概念,那麼您可以通過將trigger呼叫移動到onShow函數來解決您的問題。否則,您需要將trigger呼叫移至您實際將view.el插入DOM的任何位置。

// In view 
onShow : function() { 
    this.ui.currency_change.trigger('changed_currency'); 
} 

// View instantiation code 
var view = new SomeView(); 
App.someRegion.show(view); 
+0

工作就像一個魅力。非常感謝 :) – skipi