2012-03-07 58 views
1

假設我有一個Backbone視圖,並且我經常更換el的內容,那麼我將如何在新的調整後的el內容上重新運行非事件操作?例如;說我已經取代了內容,並希望所有鏈接使用燈箱腳本。要正常附加腳本,你可以在渲染中做這樣的事情;在主幹視圖中監視el更改?

this.$el.find('a').box() 

但是在內容替換之後,需要再次運行。鑑於你不一定知道el內容何時被替換,你將如何重新運行它?我似乎無法找到一個我可以委託的事件 - 準備好,加載並更改所有聲音,但他們都無法工作。理想情況下,我希望能夠在事件散列中放入一些東西,以調用在每次替換後運行這些事情的方法。

+0

做替換的代碼總是來自同一個地方嗎? – Eli 2012-03-07 00:18:21

+0

有幾種不同的組件可以替換內容,所以我需要找出一種足夠的解耦方法來觸發某種「更改」事件,告訴它重新運行它使用的任何插件。 – 2012-03-07 00:26:03

+0

內容本身是視圖還是視圖的一部分? – Eli 2012-03-07 00:37:00

回答

1

你可以在你初始化做到這一點:

$(this.el).livequery(function() { 
    // perform selector on $(this) to apply box 
}); 

無恥被盜,從jquery live event for added dom elements

+0

Eww ...我不想爲此放入整個第三方庫。現在我只是手動觸發容器發生更改的容器上的更改事件。這種hacky,但至少它保持事件定義的標準,並不需要依賴一些第三方庫 - 特別是考慮到它在2年內沒有更新! – 2012-03-07 00:45:06

+0

加上它基於livequery,就像jQuery'live'一樣,它會因爲它的惡意而被棄用。 – Eli 2012-03-07 01:01:23

+0

好吧。我會補充說,如果你的骨幹視圖不是基於模型(我認爲由於變化事件不起作用),那麼你從骨幹視圖中獲取的信息並不多。這實際上只是一個對話(參見http://documentcloud.github.com/backbone/#View的第一段) – timDunham 2012-03-07 03:00:33

0

你可以使用一個事件聚合略作修改。您在聚合器中創建一個綁定到每次更改el內容時運行的函數的事件。無論何時您替換el內容,都會觸發您創建的事件。在這裏看看這篇文章更詳盡的解釋:Event Aggregator