Ember.js: переход к маршруту, затем в динамический сегмент
У меня есть маршрутизатор, настроенный со счетами, и параметры account/: account_id. Когда пользователь приземляется на индексной странице моего приложения, я перехожу к пути к учетным записям.
Social.Router.map(function() {
this.resource('accounts', function(){
this.resource('account', { path: ':account_id'});
});
});
Social.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('accounts');
}
});
Я бы хотел сделать переход к указанному пути: account_id, основанному на некоторых критериях. На данный момент я просто хочу получить первую учетную запись в массиве и использовать ее. Но в будущем это может быть способ перевести их на последний счет, который они просматривали. Что-то вроде этого:
Social.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('accounts/:account_id');
}
});
Документы дают "деталь", но не приводят пример, предлагая только следующее:
transitionTo (имя, модели)
Переход на другой маршрут. По желанию укажите модель маршрута обсуждаемый. Модель будет сериализована в URL, используя сериализовать крюк.
Я пробовал следующее:
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
Ответы
Ответ 1
Я собрал ответы других и немного возился с этим ответом:
укажите ваши маршруты как:
this.resource('accounts', function () {
this.route('account', {path: '/:account_id'});
});
редирект:
this.transitionTo('accounts.account', accountObj);
Но если вы загружаетесь с сервера, вам нужен объект accountObj
, загруженный до перенаправления:
var accountObj = App.Account.find(1);
accountObj.one('didLoad', this, function () {
this.transitionTo('accounts.account', accountObj);
});
Я установил эту скрипту с полным примером
Ответ 2
Похоже, что переходTo устарел в пользу переходаToRoute.
Тем не менее вы можете достичь перенаправления, имея исходное объявление this.resource('account', { path: '/:account_id'});
, а затем переход с единственным созданным объектом должен работать.
Ответ 3
Вы не указали маршрут маршрута правильно, и у вас должен быть маршрут под ресурсом, а не другой ресурс. Это должно быть так:
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));
}
});
Ответ 4
С последним Ember (1.0.0-RC-6) это прекрасно работает.
Маршрутизатор:
this.resource('accounts', function () {
this.resource('account', {path: '/:account_id'});
});
Чтобы перенаправить:
this.transitionToRoute('account', Social.Account.find(1))
Ответ 5
Поскольку ваш /: account_id - это ресурс, вам необходимо перейти к учетной записи ToRoute. Вам также необходим AccountRoute.
Если/: account_id был маршрутом, а не ресурсом, который вы должны были бы перевестиToRoute 'accounts.account', а ваш обработчик маршрута будет называться AccountsAccountRoute.