8

私はマリオネットリージョンマネージャーを使用してビューを管理しています。3つのメインリージョンがあります:1]トップメニューリージョン2]サイドバーリージョン3]メインリージョン(変化し続ける実際のページ)

トップメニューとサイドバーのアクションに応じて、を使用してメインリージョンでレンダリングされるビューを変更し続けますApp.MainRegion.show(view)

persistViewここで、タブ/ブラウザを閉じない限り、一度レンダリングされたビューを閉じてはならない特定のビュー()が1つあります。

当然、次のApp.MainRegion.show(view)理由でここを使用することはできません。

  1. show(persistView)初めて呼び出されたときは、すべて問題ありません。
  2. 私が離れてナビゲートすると、のshow(otherview)呼び出しclose()になりpersistViewます。これは必須ではありません。

私の現在の解決策は次のとおりです。

  1. persistRegionのすぐ下にという新しいリージョンがありますmainRegion
  2. persistView常にでレンダリングされますpersistRegion
  3. のでonShow()persistView私はを非表示にしmainRegionて表示しますperistRegion

上記は機能しますが、私は非常にハックだと思います。また、ステップ3]の後で、ユーザーが他のビューに移動すると、スタックします。今、私はpersistViewそれがそれ自体を隠して表示する必要があることをどのように伝えるのmainRegionですか?

どんな助けでも大歓迎です。

4

2 に答える 2

26

メインビューに対して「永続的」ビューを保持する領域があるという点で、レイアウトは適切に聞こえると思います。しかし、私はこれら2つの地域にお互いを知らせたり、お互いの表示を制御しようとはしませんでした。代わりに、これを行う方法を知っている別のオブジェクトを作成します。

このオブジェクトは、関係するさまざまなビューおよび領域からの正しいイベントをリッスンする責任があります。次に、表示および非表示にする領域を決定します。

ただし、重要なのは、リージョンを表示および非表示にする方法です。リージョンを閉じて、リージョン内のビューを削除する必要はありません。少なくとも、ではありませんpersistRegion。ただし、代わりにできることはhide()、その地域のel

persistRegion.$el.hide()

persistRegion.$el.show()

リージョンの$el属性は、リージョン内にビューが表示された後、またはを呼び出した後に使用可能になりますregion.ensureElement()

于 2012-06-17T18:14:23.340 に答える
1

リージョンの要素を非表示にして表示する代わりに、マリオネットリージョンからreset()メソッドを使用することをお勧めします。ドキュメントへのリンクは次のとおりですhttp://marionettejs.com/docs/v2.4.4/marionette.region.html#reset-a-region= >リージョンはいつでもリセットできます。これにより、表示されている既存のビューがすべて破棄され、キャッシュされたelが削除されます。次にリージョンがビューを表示するときに、リージョンのelがDOMから照会されます。

myRegion.reset(); これは、リージョンがビューインスタンス間で再利用される場合、および単体テストで役立ちます。

于 2016-02-29T18:23:57.010 に答える