2015-12-11 122 views
0

我已經搜索了互聯網尋找破壞舊視圖的方法。 有功能可以做到這一點,但是,我不知道如何觸發它們。理想情況下,在關閉視圖時會有一種觸發破壞的方法。 我找不到如何觸發該特定事件的方法。如何刪除舊的骨幹視圖

回答

2

你應該叫view.remove()觸發其銷燬的文件http://backbonejs.org/#View-remove

例如,在指定的,如果你有:

var myView = Backbone.View.extend({ 
    initialize: function() { 
     ... 
    }, 

    render: function() { 
     ... 
    } 
}); 

您可以稍後致電myView.remove()前提是你必須myView提供一個參考。

如果您使用listenTo(推薦)方法而不是on偵聽器,則此方法還應刪除與該視圖綁定的任何事件偵聽器。您也可以添加view.off()以確保事件被刪除。

此外,您將需要添加視圖的方式來偵聽關閉事件,以便您可以調用remove和off方法。你應該參考12

+0

我想觸發毀滅時,我瞭解它們到一個新的觀點,所以view.remove函數必須在離開舊視圖和輸入新視圖之間觸發。這是我的問題,我不知道何時何地使用remove函數。我希望這會幫助你理解這個問題。 –

+0

你應該參考我在答案底部發布的鏈接。一種方法是修改Backbone.View類以包含close方法。另一種方法是創建一個父類,以使您的所有視圖繼承自支持關閉事件功能的視圖。最後,可以重寫Backbone.Router中的導航方法來執行活動視圖的銷燬,然後調用原始導航函數或使用router.route手動設置路由,並使用刪除活動視圖的回調函數。 –

+0

我試圖通過創建一個與現有視圖關聯的全局變量來銷燬路由器中的現有視圖,並在創建與該全局變量新關聯的新視圖之前銷燬該視圖,但似乎不起作用 –

0

這個古老而神奇的作品by Derick Bailey在解釋這個問題以及如何解決問題方面做得非常出色。由於莫妮卡正確地提出這依賴於view.remove()但你可以更新你的路由器來破壞你現有的觀點 - 嘗試類似的東西

if (currentView) { 
    currentView.remove(); 
    currentView = newView(); 
} 
+0

我試圖使用 if(currentView)currentView.remove(); currentView = newView(); } –

+0

我試圖把一個this.currentView = null在初始化我的路由器,在清理函數中,沒有輸入if語句,就像if(this.currentView)不起作用.. –

+0

在某個點您需要將this.currentView更新爲您想要刪除的視圖。在您的各個骨幹路由中執行此操作可能很有意義,然後創建一個單獨的函數,其中包含您可以在每次導航到新骨幹路由時調用的if語句。 –