2012-06-25 11 views
5

Esistono altre possibilità di gestione con i controller e le viste di Ember.Router? La mia struttura dell'app dipende generalmente da require.js che si occupa delle dipendenze corrispondenti.Come posso impostare ApplicationController in Ember.Router

Nel mio esempio sto facendo la cosa App.ApplicationController come il controller del router principale.

Ecco un jsfiddle: http://jsfiddle.net/mediastuttgart/uMKGt/1/

Ma c'è qualche possibilità di impostare manualmente? Ho trovato questo messaggio di commit https://github.com/emberjs/ember.js/commit/be69395f5eec4187b1df052d7386bcda45f79475 dove posso vedere, come impostare il controller e visualizzare manualmente (comunque non potrebbe ottenere questo funzionamento). Ma non riusciva a trovare alcun esempio come:

App = Ember.Application.create(); 

App.MyController = Ember.Controller.extend({}); 
App.MyView = Ember.View.extend({}); 

Router = Ember.Router.extend({ 
    applicationController : App.MyController, 
    root : Ember.Route.extend({ 
     index : Ember.Route.extend({ 
      route : '/', 
      connectOutlets : function (router) { 
       router.get('applicationController').connectOutlet(App.MyView); 
      } 
     }) 
    }), 
    ... 
}); 

EDIT

Sto cercando di spiegare questo un po 'più in dettaglio. Mentre usiamo require.js per gestire o dipendenze, abbiamo più controller che sono responsabili per le proprie parti dell'intera applicazione. Supponiamo di avere un modulo di iscrizione alla newsletter. Il controller utilizzato per questo scenario è strutturato in

- app 
-- controller 
--- newsletter 
---- signup.js 
--- cart 
--- checkout 
-- view 
-- model 
-- router 
-- template 

Come si usa una funzione personalizzata per generare spazi dei nomi Em.Provide('App.Controller.Newsletter'); che crea un oggetto a App.Controller.Newsletter. Questo oggetto ora serve come base di controllo per la nostra intera applicazione di newsletter. A partire da App.Controller.Newsletter.Signup = Ember.Controller.extend({}); abbiamo bisogno di passare in questa istanza come "ApplicationController" per il router. Come puoi vedere, non possiamo semplicemente usare App.ApplicationController per creare un'istanza di un controller per Ember.Router.

risposta

9

Non so nulla di requirejs, ma penso che l'unica cosa che è quello di definire un

App.ApplicationController = Ember.Controller.extend({...behavior here...}) 

e poi, quando si chiama

App.initialize() 

Il quadro sarà poi iniettare automaticamente questo controller in il router.

+6

N.B. La denominazione è importante qui. Ember cerca un ApplicationController sotto lo spazio dei nomi dell'applicazione. se la domanda originale avesse usato quella invece di MyApplicationController avrebbe funzionato automaticamente. –

+0

@BradleyPriest Avrei dovuto scrivere questo ... –

+0

Grazie per le risposte. Ho aggiornato la mia domanda con maggiori dettagli. –

Problemi correlati