2014-02-24 58 views
0

我有一個視圖,我需要重新呈現它在同一頁面。如何克隆Backbone中的視圖?

如果我再次打電話.render(),第一個渲染消失了。

jQuery.extend()克隆視圖對象具有相同的結果。

var cloneView = $.extend(true, {}, view); 
$('#container').append(cloneView.render().el); 

我不能叫new View(),因爲有不同的視圖類。

我該如何對視圖進行適當的克隆?

+0

你想呈現兩頁相同的DOM元素? –

+0

我不這麼認爲,我的觀點只是渲染一個小'div'。如果你用'div'表示'page',那麼是,但不能渲染成相同的DOM元素。 – BMH

+0

爲什麼不簡單地創建視圖的新實例? –

回答

1

你不能只是複製你的看法,並使用它,你想要的方式,因爲有在後臺完成,想了很多工作:

  • cid代:你的觀點的唯一ID在你的應用程序。
  • $el代:鑑於主要的DOM元素
  • events代表團:視圖事件代表團

所以,如果你在克隆你的觀點堅持,我會建議你創建它var cloneView = $.extend(true, {}, view);克隆該做些什麼完全是new View做的。

而且如mu is too short建議,事件$.extend將無法​​正常工作。

因此,要做到這一點的最好辦法,就是實例化一個new View

+2

我不認爲'$ .extend'會知道如何處理視圖的'el',事件,包含的模型/收藏和他們的活動,... –

+1

@ muistooshort你是對的,我只是想說服他創造一個新的觀點。 –

0

是很危險的去盲目地克隆任何觀點。您需要檢查模板和視圖中的硬編碼ID等細微內容,模板在不同位置重新使用時的樣式,等等。

我會建議之一:

  1. 創建視圖的新實例。 (如果您確定可以安全地將另一個實例與前一個視圖實例同時呈現在同一頁上)。

var my_view = new MyView({ el: $("#id") });

  1. 創建延伸這一觀點的新觀點。 (這是一個更好的選擇)

CloneView = MyView.extend({ // Stuff for CloneView }); var my_view = new CloneView({ el: $("#id") });