Versteckt eine Ansicht im Regionsmanager, wenn eine andere Ansicht angezeigt wird

8

Ich verwende den Manager der Marionette-Region, um meine Ansichten zu verwalten. Es gibt drei Hauptregionen: 1] Oberer Menübereich 2] Seitenleistenbereich 3] Hauptregion (die aktuelle Seite, die sich ständig ändert)

Abhängig von den Aktionen im oberen Menü und der Seitenleiste ändere ich die Ansicht, die in den Hauptregionen mit App.MainRegion.show(view) gerendert wird.

Nun gibt es eine bestimmte Ansicht ( persistView ), die einmal gerendert nicht geschlossen werden sollte, es sei denn, die Registerkarte / der Browser ist geschlossen.

Natürlich kann ich das App.MainRegion.show(view) hier aus folgenden Gründen nicht verwenden:

  1. Wenn show(persistView) das erste Mal aufgerufen wird, ist alles in Ordnung.
  2. Wenn ich weg navigiere, ruft%%%% show(otherview) close() auf. Was nicht erforderlich ist.

Meine aktuelle Lösung ist:

  1. Lassen Sie eine neue Region namens persistView knapp unter der persistRegion .
  2. mainRegion wird immer in persistView .
  3. gerendert
  4. In der persistRegion von onShow() verstecke ich die persistView und zeige die mainRegion

Das obige funktioniert, aber ich denke, ist sehr hackish. Auch ich bin fest, wenn nach Schritt 3] der Benutzer zu einer anderen Ansicht navigiert. Wie kann ich peristRegion sagen, dass es sich verstecken soll und persistView anzeigen?

Jede Hilfe wird sehr geschätzt.

    
CodeRain 08.06.2012, 09:37
quelle

2 Antworten

25

Ich denke, Ihr Layout klingt gut, in Bezug auf eine Region, die die "persistente" Ansicht gegenüber der Hauptansicht enthält. Aber ich würde nicht zulassen, dass diese beiden Regionen voneinander erfahren oder versuchen, sich gegenseitig zu kontrollieren. Stattdessen würde ich ein separates Objekt erstellen, das weiß, wie das geht.

Dieses Objekt würde dafür verantwortlich sein, die richtigen Ereignisse aus den verschiedenen Ansichten und Regionen zu hören. Dann würde es bestimmen, welche Regionen angezeigt und versteckt werden sollen.

Der Schlüssel liegt darin, wie Sie die Regionen anzeigen und ausblenden. Sie möchten nicht die Regionen schließen und die Ansichten in ihnen entfernen - zumindest nicht die persistRegion . Was Sie stattdessen tun können, ist hide() der Region el

persistRegion.$el.hide()

und

persistRegion.$el.show()

Das Attribut $el der Region ist verfügbar, nachdem eine Ansicht in der Region angezeigt wurde oder nachdem Sie region.ensureElement() aufgerufen haben.

    
Derick Bailey 17.06.2012, 18:14
quelle
1

Ich kann vorschlagen, die Methode reset () aus Marionettenregionen zu verwenden, anstatt das Element der Region zu verstecken und anzuzeigen. Hier ist ein Link zum Dokument Ссылка = & gt; Eine Region kann jederzeit zurückgesetzt werden. Dies zerstört jede vorhandene Ansicht wird angezeigt und löscht das zwischengespeicherte el. Das nächste Mal das Region zeigt eine Aussicht, die Region El ist abgefragt das DOM.

myRegion.reset (); Dies ist nützlich, wenn Regionen in der Ansicht wiederverwendet werden Instanzen und in Unit-Tests.

    
David Fallas 29.02.2016 18:23
quelle

Tags und Links