我有一個視圖,我需要重新呈現它在同一頁面。如何克隆Backbone中的視圖?
如果我再次打電話.render()
,第一個渲染消失了。
與jQuery.extend()
克隆視圖對象具有相同的結果。
var cloneView = $.extend(true, {}, view);
$('#container').append(cloneView.render().el);
我不能叫new View()
,因爲有不同的視圖類。
我該如何對視圖進行適當的克隆?
我有一個視圖,我需要重新呈現它在同一頁面。如何克隆Backbone中的視圖?
如果我再次打電話.render()
,第一個渲染消失了。
與jQuery.extend()
克隆視圖對象具有相同的結果。
var cloneView = $.extend(true, {}, view);
$('#container').append(cloneView.render().el);
我不能叫new View()
,因爲有不同的視圖類。
我該如何對視圖進行適當的克隆?
你不能只是複製你的看法,並使用它,你想要的方式,因爲有在後臺完成,想了很多工作:
cid
代:你的觀點的唯一ID在你的應用程序。$el
代:鑑於主要的DOM元素events
代表團:視圖事件代表團所以,如果你在克隆你的觀點堅持,我會建議你創建它var cloneView = $.extend(true, {}, view);
克隆該做些什麼完全是new View
做的。
而且如mu is too short
建議,事件$.extend
將無法正常工作。
因此,要做到這一點的最好辦法,就是實例化一個new View
我不認爲'$ .extend'會知道如何處理視圖的'el',事件,包含的模型/收藏和他們的活動,... –
@ muistooshort你是對的,我只是想說服他創造一個新的觀點。 –
是很危險的去盲目地克隆任何觀點。您需要檢查模板和視圖中的硬編碼ID等細微內容,模板在不同位置重新使用時的樣式,等等。
我會建議之一:
var my_view = new MyView({ el: $("#id") });
CloneView = MyView.extend({ // Stuff for CloneView }); var my_view = new CloneView({ el: $("#id") });
你想呈現兩頁相同的DOM元素? –
我不這麼認爲,我的觀點只是渲染一個小'div'。如果你用'div'表示'page',那麼是,但不能渲染成相同的DOM元素。 – BMH
爲什麼不簡單地創建視圖的新實例? –