2013-02-26 13 views
14

Mam konfigurację routera z kontami i kontami /: opcje account_id. Gdy użytkownik znajdzie się na stronie indeksu mojej aplikacji, przenosimy je do ścieżki kont.Ember.js: przejście do trasy, a następnie do segmentu dynamicznego

Social.Router.map(function() { 
    this.resource('accounts', function(){ 
     this.resource('account', { path: ':account_id'}); 
    }); 
}); 

Social.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('accounts'); 
    } 
}); 

Co chcę zrobić, to przenieść je do określonej ścieżki account_id na podstawie pewnych kryteriów. W tej chwili chcę uzyskać pierwsze konto w tablicy i użyć tego. Ale w przyszłości może to być sposób na przeniesienie ich do ostatniego konta, które przeglądali. Coś takiego:

Social.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('accounts/:account_id'); 
    } 
}); 

Docs dać "szczegół", ale nie dają przykład, tylko oferując następujące:

transitionTo (name, models)

Transition into another route. Optionally supply a model for the route in question. The model will be serialized into the URL using the serialize hook.

Próbowałem następujące:

this.transitionTo('accounts/4'); 
Uncaught Error: assertion failed: The route accounts/4 was not found 

this.transitionTo('accounts', Social.Account.find(1)); 
Uncaught More objects were passed than dynamic segments 

Odpowiedz

13

ułożyła odpowiedzi innych osób i jakiś błahy i wyszedł z tej odpowiedzi:

określić swoje trasy jak:

this.resource('accounts', function() { 
    this.route('account', {path: '/:account_id'}); 
}); 

przekierowanie:

this.transitionTo('accounts.account', accountObj); 

Ale jeśli ładujesz z serwera, potrzebujesz załadowanego obiektu accountObj rzed przekierowanie:

var accountObj = App.Account.find(1); 
accountObj.one('didLoad', this, function() { 
    this.transitionTo('accounts.account', accountObj); 
}); 

skonfigurować this fiddle z pełną przykład

+0

Twoje skrzypce nie działały, więc zaktualizowałem je dzwoniąc z CDNjs.com: http://jsfiddle.net/XNyme/9/ – commadelimited

2

Wygląda na to, że transitionTo jest przestarzałe na rzecz transitionToRoute.

Mimo to można osiągnąć przekierowanie poprzez oryginalną deklarację this.resource('account', { path: '/:account_id'});, a następnie powinno działać przejście za pomocą pojedynczego utworzonego obiektu.

2

Nie określasz poprawnie trasy trasy i powinieneś mieć trasę pod zasobem, a nie innym zasobem. Powinno być tak:

Social.Router.map(function() { 
    this.resource('accounts', function(){ 
     this.route('account', { path: '/:account_id'}); 
    }); 
}); 

Social.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('accounts.account', Social.Account.find(1)); 
    } 
}); 
+0

Ok.Wdrożenie tego kodu sprawia mi dwie rzeczy. 1) Adres URL zmienia się zgodnie z oczekiwaniami. 2) Otrzymuję komunikat o błędzie konsoli: "Uncaught Error: asercja nie powiodła się: nie znaleziono konta trasy". Kiedy ląduję na '/' adres URL zmienia się na '/ #/accounts/1', co jest tym, czego oczekiwałbym, ale nic się nie ładuje i pojawia się błąd konsoli. – commadelimited

+0

Zapomniałem dodać ścieżkę do zasobu kont root. – buuda

0

Jako swój /: account_id jest zasobem, którego potrzebujesz do przejścia do "konta". Musisz również odpowiednio AccountRoute.

Jeśli /: account_id była trasą, a nie zasobem, który chcesz przekazaćToRoute "accounts.account", a twój przewodnik obsługi trasy nazywałby się AccountsAccountRoute.

1

z najnowszych Ember (1.0.0-RC-6), to działa doskonale.

Router:

this.resource('accounts', function() { 
    this.resource('account', {path: '/:account_id'}); 
}); 

Aby przekierować:

this.transitionToRoute('account', Social.Account.find(1)) 
+0

To działa tylko z ember 1.1.3 + pre.e0ffbf84. Dzięki. – hiroshi

Powiązane problemy