2012-06-08 14 views
8

Sto utilizzando il gestore della regione Marionette per gestire le mie viste. Ci sono tre regioni principali: 1] regione Menu superiore 2] regione Sidebar 3] regione principale (la pagina reale che continua a cambiare)Nascondere una vista in Region Manager, quando viene mostrata un'altra vista

A seconda delle azioni nel menu in alto e la barra laterale che continuare a cambiare l'opinione che viene visualizzato nelle regioni principali utilizzando App.MainRegion.show(view).

Ora c'è una vista particolare (persistView) che una volta renderizzata non dovrebbe essere chiusa a meno che la scheda/il browser non sia chiusa.

Naturalmente non posso usare il App.MainRegion.show(view) qui per motivi Foll:

  1. Quando il show(persistView) si chiama la prima volta tutto è a posto.
  2. Se mi allontano, lo show(otherview) chiamerà close() di persistView. Che non è richiesto

mia soluzione attuale è:

  1. avere una nuova regione chiamata persistRegion appena sotto la mainRegion.
  2. persistView verrà sempre visualizzato nello persistRegion.
  3. Nel onShow() di persistView, mi nascondo il mainRegion e mostrano le peristRegion

I lavori di cui sopra, ma credo sia molto hacker. Inoltre sono bloccato quando dopo il punto 3] l'utente naviga verso qualsiasi altra vista. Ora come posso dire allo persistView che dovrebbe nascondersi e mostrare lo mainRegion?

Qualsiasi aiuto sarà molto apprezzato.

risposta

25

Penso che il tuo layout suona bene, in termini di avere una regione per mantenere la vista "persistente" rispetto alla vista principale. Ma non permetterei a quelle due regioni di conoscersi l'un l'altro o cercare di controllarci a vicenda. Invece, vorrei creare un oggetto separato che sa come farlo.

Questo oggetto sarebbe responsabile dell'ascolto degli eventi corretti dalle varie viste e regioni coinvolte. Quindi determinerebbe quali regioni mostrare e nascondere.

La chiave è in come si mostrano e si nascondono le regioni, però. Non vuoi chiudere le regioni e rimuovere le viste al loro interno, almeno non lo persistRegion. Che cosa si può fare, invece, però, è hide() della regione el

persistRegion.$el.hide()

e

persistRegion.$el.show()

attributo della regione $el sarà disponibile dopo la vista è stato visualizzato all'interno della regione, o dopo aver chiamato region.ensureElement().

+6

solo una nota: region.ensureElement() è stato modificato in region.ensureEl() –

+1

... ed è stato modificato nuovamente in '_ensureElement()' – alxndr

1

Posso suggerire di utilizzare il metodo reset() dalle regioni di marionette, invece di nascondere e mostrare l'elemento della regione. Ecco un collegamento al documento http://marionettejs.com/docs/v2.4.4/marionette.region.html#reset-a-region => Una regione può essere ripristinata in qualsiasi momento. Questo distrugge qualsiasi vista esistente visualizzata e cancella la cache el. La prossima volta che la regione mostra una vista, l'EL della regione viene interrogato dal DOM .

myRegion.reset(); Ciò è utile quando le regioni vengono riutilizzate attraverso le istanze della vista e nel test dell'unità.

+1

È necessario includere le informazioni pertinenti dal collegamento nella risposta in modo tale che le informazioni pertinenti non vengano perse nel caso in cui il collegamento decada. – drneel

Problemi correlati