Ember.js: переход к маршруту, затем в динамический сегмент - программирование
Подтвердить что ты не робот

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
4b9b3361

Ответ 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.