2012-06-08 66 views
8

我正在使用Marionette區域管理器來管理我的視圖。有三個主要區域:根據不同的頂部菜單和側邊欄上的操作 1]排名菜單區域 2]邊欄區域 3]的主要區域(實際的頁面,不斷變化)隱藏區域管理器中的視圖時,顯示另一個視圖

我是不斷變化的觀點在主要地區使用App.MainRegion.show(view)進行渲染。

現在有一個特定的視圖(persistView)曾經呈現應該不關閉,除非關閉標籤/瀏覽器。

當然,我不能使用App.MainRegion.show(view)這裏FOLL原因:

  1. show(persistView)被稱爲第一時間一切正常。
  2. 如果我導航show(otherview)將撥打close()persistView。這不是必需的。

我目前的解決辦法是:

  1. 有一個新的區域就在下面mainRegion稱爲persistRegion
  2. persistView將始終呈現在persistRegion中。
  3. persistViewonShow(),我隱藏mainRegion並顯示peristRegion

以上的作品,但我認爲這是非常的hackish。此外,我在步驟3之後被卡住]用戶導航到任何其他視圖。現在如何告訴persistView它應該隱藏自己並顯示mainRegion

任何幫助將不勝感激。

回答

25

我認爲你的佈局聽起來不錯,就地區而言,持有「持久性」視圖與主視圖。但我不會讓這兩個地區相互瞭解或試圖控制彼此的展示。相反,我會創建一個單獨的對象,知道如何做到這一點。

此對象將負責從各種視圖和區域收聽正確的事件。然後它會確定要顯示和隱藏的區域。

雖然,關鍵在於如何顯示和隱藏區域。您不想關閉區域並刪除其中的視圖 - 至少,不是persistRegion。你可以做什麼,而不是,雖然是hide()該地區的el

persistRegion.$el.hide()

persistRegion.$el.show()

該地區的$el屬性將提供後視已經在區域內顯示,或請致電region.ensureElement()

+6

只是一個註釋:region.ensureElement()更改爲region.ensureEl() –

+1

...並且它已再次更改爲'_ensureElement()' – alxndr

1

我可能會建議使用來自牽線木偶區域的reset()方法,而不是隱藏和顯示區域的元素。 這裏有一個指向文檔的鏈接http://marionettejs.com/docs/v2.4.4/marionette.region.html#reset-a-region =>一個地區可以在任何時候重置。這會破壞正在顯示的任何現有視圖 ,並刪除緩存的el。下一次 區域顯示一個視圖時,該區域的el從 DOM中查詢。

myRegion.reset(); 當區域在視圖 實例和單元測試中重複使用時,這非常有用。

+1

您應該在鏈接中包含相關信息如果鏈接消失,相關信息不會丟失。 – drneel

相關問題