2012-10-22 5 views
11

Utilizzo Ember da un po ', ma continuo a lottare a volte per scoprire le migliori pratiche. Quindi, uno dei modi tempora materia di controllo e la vista èEmber multiple istanza di controller

un parere di designer di Ember, che viene applicata dal router è che per una data BaseName (ad esempio "Applicazione", "CustomerEntry," "Il mio archivio") ci dovrebbe essere un BaseNameView e un BaseNameController. - Ember guide

Il problema è che cosa succede se voglio più istanze della stessa vista su una pagina. Poiché il controllore viene creato durante l'avvio dell'applicazione, si tratta di single sotto lo spazio dei nomi dell'applicazione, che non sarà in grado di contenere due istanze dei dati del modello.

Una soluzione che vedo è creare manualmente i controller (ei dati del modello) e passarli alle viste. Ma in questo caso, vorrei che Ember non crea automaticamente i controller per me. In altre parole, perché Ember crea i controller come singleton durante l'avvio dell'applicazione.

+0

Sei sicuro di avere più istanze dello stesso controller? Sembra che potresti avere diversi controller associati alle diverse visualizzazioni che ti servono. I controllori non contengono diverse istanze di dati del modello, generalmente eseguono il proxy dei dati alla vista utilizzando i collegamenti. La mia comprensione dell'architettura di Ember è che l'idea con Views è che sono strettamente responsabili per roba DOM/CSS e gestione degli eventi utente. La logica dell'applicazione rimane a livello di router/controller, quindi forse ha senso avere più controller distinti, anche se essi proxy gli stessi dati. –

risposta

2

Penso che ci siano molti casi di utilizzo in cui un tipo di vista non ha un tipo di controller corrispondente. Soprattutto quando il tipo di visualizzazione è più simile a un widget dell'interfaccia utente che a una funzionalità dell'applicazione completa. Molte viste possono condividere lo stesso controller. Date un'occhiata a questo modello applicationView:

<h1>Here are two files, compare them</h1> 
{{view App.MyFileView contentBinding="leftFileContent"}} 
{{view App.MyFileView contentBinding="rightFileContent"}} 

Questo crea due istanze della mia classe di visualizzazione e lega le loro proprietà di contenuti di due diverse proprietà sul ApplicationController. La proprietà del controller per entrambe le visualizzazioni è impostata sull'istanza applicationController singleton.

Una possibile ragione per cui i controller sono singleton potrebbe essere che possono essere indirizzati nel namespace globale tramite qualcosa come App.router.myController.

+0

Come usare la proprietà controllerBinding? –