2012-06-22 5 views
6

Jestem pewien, że stanie się to jasne, kiedy będę się pogłębiał, ale na razie nie jest oczywiste, jak to się stało.Trasowanie Ember.js: jak ustawić domyślną trasę do renderowania natychmiast?

Podążałem za informacją na temat this helpful SO article about routing, ale w tym przykładzie brakuje ważnego elementu, tj. Jak uzyskać widok "domowy", aby renderować od razu, bez konieczności klikania linku "Strona główna"?

Zacząłem zagłębiać się w dokumentach, próbując to zrozumieć, ale tymczasem wydaje się, że przydatnym pytaniem była odpowiedź dla potomności.

Grałem z pracy jsfiddle przykład z powyższym pytaniem here i porównując z tym inny przykład stwierdziliśmy, że seems to have the default routing working

tej pory to wciąż tajemnica.

Aktualny kod:

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.State.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.State.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.State.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet('home'); 
     } 
    }), 

    // STATES 
    profile: Em.State.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

AKTUALIZACJA: Rozwiązanie

Okazuje się, że powodem przykład pracowałem z nie działa, ponieważ był za pomocą Em.State.extend raczej niż Em.Route.extend. Ciekawe jest to, że gdy przejdę i zmieniam je jeden po drugim, przykład nie zadziała, dopóki nie zmienię ich wszystkich.

Oto pracuje example:

App.Router = Em.Router.extend({ 
    enableLogging: true, 
    location: 'hash', 

    root: Em.Route.extend({ 
    // EVENTS 
    goHome: Ember.State.transitionTo('home'), 
    viewProfile: Ember.State.transitionTo('profile'), 

    // STATES 
    index: Em.Route.extend({ 
     route: "/", 
     redirectsTo: 'home' 
    }), 

    home: Em.Route.extend({ 
     route: '/home', 
     connectOutlets: function(router, context) { 
      var appController = router.get('applicationController'); 
      appController.connectOutlet({name: 'home'}); 
     } 
    }), 

    // STATES 
    profile: Em.Route.extend({ 
     route: '/profile', 
      connectOutlets: function(router, context) { 
       var appController = router.get('applicationController'); 
       appController.connectOutlet('profile'); 
      } 
     }), 
     doOne: function() { 
      alert("eins"); 
     } 
    }) 
}); 

Odpowiedz

3

U można zrobić przekierowanie z indeksu do drogi głównej. Przykład roboczy: http://jsfiddle.net/FRfBt/

+1

Dzięki dla przykładu roboczego. Zajęło mi trochę czasu, aby dowiedzieć się, jaka jest różnica z mojego przykładu powyżej, ale w końcu zorientowałem się. Podany przeze mnie przykład nie działał, ponieważ używał 'Em.State.extend' zamiast' Em.Route.extend' – radixhound

9

Wygląda na to, że dzieje się to już teraz. Miałem sukcesu z tym sposób prowadzenia go:

App = Ember.Application.create(); 

App.Router.map(function() { 
    // 'index' route is default 
    this.resource('dashboard'); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     // this redirects/to /dashboard 
     this.transitionTo('dashboard'); 
    } 
}); 

App.DashboardRoute = Ember.Route.extend({ 
}); 
6

Z Cienia CLI, można umieścić przekierowanie w index.js w katalogu głównym katalogu trasach:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    redirect: function() { 
    this.transitionTo('dashboard'); 
    } 
});