2011-12-20 11 views
10

Curioso sulla procedura corretta o almeno una procedura comune per l'utilizzo di sproutcore-routing.Procedura corretta per l'utilizzo dello sproutcore-routing

Nel leggimi ci mostra questo esempio di base per il routing:

SC.routes.add(':controller/:action/:id', MyApp, MyApp.route); 

sto supponendo che nella maggior parte dei casi MyApp.route chiamerebbero l'azione in dotazione sul controller in dotazione. La mia domanda riguarda più oltre questa fase il modo in cui gestisci il materiale di setup/teardown per un'applicazione in cui hai molte viste principali.

Le persone creano l'istanza di nuovi controller quando il controller cambia in modo da iniziare sempre con una lista pulita di dati e viste? O è più comune/consigliabile istanziare tutti i controller e così via e semplicemente utilizzare il routing per mostrare/nascondere le viste primarie?

Suppongo che la stessa domanda vada quando si rimbalza tra le azioni all'interno di un controller. È corretto fare un po 'di teardown, specialmente sui binding/ascoltatori, e quindi ristabilirli se l'azione viene richiamata?

La mia domanda può essere un po 'sfocata, ma fondamentalmente mi sto chiedendo come le persone gestiscono molte viste principali e si occupano di pulizia in modo che le cose non diventino obsolete o masticino molte risorse.

risposta

2

Nella maggior parte delle app e degli esempi di Ember e Sproutcore che ho visto, i controller vengono istanziati durante l'inizializzazione dell'app. I percorsi guidano le modifiche dello stato negli statecharts, dove i controllori sono aggiornati e le viste vengono create/distrutte secondo necessità.

2

Ho la seguente configurazione.

nel mio Ember.Application.create() ho il seguente codice:

MyApp.routes = Em.Object.create({ 
     currentRoute: null, 

     gotoRoute: function(routeParams) { 
      console.log('MyApp.routes gotoRoute. type: ' + routeParams.type + ' action: ' + routeParams.action + " id: " + routeParams.id); 
      if (routeParams.type === 'expectedType' && routeParams.action === 'expectedAction' && routeParams.id) { 
       //find item with ID and load in controller 
       MyApp.MyController.findItemWithId(routeParams.id); 
       //Navigate to the correct state 
       MyApp.stateManager.goToState('stateName'); 
      } 
     } 
    }) 

    SC.routes.add(":action/:type/:id", MyApp.routes, 'gotoRoute'); 

Poi, quando clicco su cose che dovrebbero causare l'URL di cambiare lo faccio:

SC.routes.set("location", "show/item/ID-123-123"); 

L'app dovrebbe ora ascoltare le modifiche nell'URL e causare l'azione corretta in base alla parte dell'URL.

Probabilmente è possibile spostare MyApp.MyController.findItemWithId (routeParams.id); alla funzione enter() dello statechart (se li si sta usando), ma è necessario memorizzare quell'ID da qualche parte in qualche controller.

Problemi correlati