2011-12-20 8 views
10

Zastanawiasz się nad prawidłową procedurą, lub co najmniej jedną wspólną procedurą korzystania z sproutcore-routing.Właściwa procedura korzystania z routingu kiełków

W czytać mnie tam pokazuje to podstawowy przykład do ułożenia:

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

jestem przy założeniu, że w większości przypadków będzie MyApp.route zadzwonić dostarczonego działanie na dostarczonym sterowniku. Moje pytanie dotyczy czegoś więcej poza tym krokiem, jak radzić sobie z ustawieniami/utratą rzeczy w aplikacji, w której masz wiele podstawowych widoków.

Czy ludzie tworzą nowe kontrolery, gdy kontroler zmienia się, aby zawsze zaczynać od czystej karty danych i widoków? A może bardziej powszechne/celowe jest tworzenie instancji wszystkich kontrolerów i takich przy obciążeniu i po prostu używanie routingu do pokazywania/ukrywania głównych widoków?

Przypuszczam, że to samo pytanie pojawia się, gdy odbija się pomiędzy działaniami w kontrolerze. Czy to jest właściwe, aby zrobić pewne rozstanie, szczególnie na wiązaniach/słuchaczach, a następnie przywracając je, jeśli akcja zostanie odwołana?

Moje pytanie może być trochę niewyraźne, ale w zasadzie zastanawiam się, jak ludzie radzą sobie z wieloma pierwotnymi widokami i zajmują się oczyszczaniem, więc rzeczy nie zestarzeją się lub nie przeżuwają wielu zasobów.

Odpowiedz

2

W większości aplikacji i przykładów Ember i Sproutcore widziałem, że kontrolery są tworzone przy inicjalizacji aplikacji. Trasy powodują zmiany stanu w stateczkach, w których kontrolery są aktualizowane, a widoki są tworzone/niszczone w razie potrzeby.

2

Mam następujące ustawienia.

w moim Ember.Application.create() Mam następujący kod:

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'); 

Następnie po kliknięciu na rzeczy, które powinny powodować URL zmienić robię:

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

Twoja aplikacja powinna teraz słuchać zmian w adresie URL i spowodować, że odpowiednie działanie będzie miało miejsce na podstawie części adresu URL.

Prawdopodobnie mógłbyś przenieść MyApp.MyController.findItemWithId (routeParams.id); do funkcji enter() statechart (jeśli używasz ich), ale musisz przechowywać ten identyfikator gdzieś w jakimś kontrolerze.