Как использовать динамические сегменты в маршрутизаторе EmberJS 2.2?

Я не могу понять, как создавать маршруты с динамическими сегментами в новом API-интерфейсе маршрутизатора для EmberJS. Я потратил неделю на это и пробовал много вещей, но это не сработало. Я действительно разочарован в себе, потому что много раз просматривал документы, API и исходный код и не могу понять, как это сделать. Я умираю за помощь.

Я пытаюсь достичь следующих маршрутов:

  • /profile/:userId -> index
  • /profile/:userId/activity -> activity page
  • /profile/:userId/...

Мой маршрутизатор настроен так

App.Router.map(function() {
  return this.resource("profile", function() {
    this.route("index", { path: '/:userId' });
    this.route("activity", { path: '/:userId/activity' });
  });
});

Then, whenever I try to link with the linkTo helper, I receive the following error: Uncaught More objects were passed than dynamic segments

  • {{#linkTo "profile.index" user}}overview{{/linkTo}}
  • Если я не включаю объект user , тогда я получаю еще одну ошибку Uncaught Error: assertion failed: Не удается вызвать get с идентификатором id на неопределенный объект. (очевидно, потому что нет объекта, чтобы принять идентификатор)

    Если это какой-то помощник, вот мои объявления маршрутов

    App.ProfileIndexRoute = Ember.Route.extend({
      model: function(params) {
        return Ember.Object.create({
          id: 1
        });
      },
      setupController: function(controller, model) {
        return controller.set("content", model);
      }
    });
    
    App.ProfileActivityRoute = Ember.Route.extend({
      model: function(params) {
        return Ember.Object.create({
          id: 1
        });
      },
      setupController: function(controller, model) {
        return controller.set("content", model);
      }
    });
    
    5
    nl ja de
    Вы когда-нибудь находили решение этого?
    добавлено автор jedmao, источник
    Спасибо Андре; Я пробовал оба пути, но ни один из них не меняет результат. Насколько я понимаю, подчеркивание влияет только на то, как Ember делает вещи по умолчанию, если метод model не определен.
    добавлено автор tina nyaa, источник
    Вы пытались изменить сегменты из: /: userId 'в: /: user_id'. Ember использует подчеркивания, а не camelCase, это по умолчанию для сегментов маршрута.
    добавлено автор Andre Malan, источник
    Кроме того, setupController: функция (контроллер, модель) {return controller.set («контент», модель); } Является ли поведение по умолчанию, вам не нужно его определять.
    добавлено автор Andre Malan, источник

    1 ответы

    пример JSBin

    Вы можете структурировать свои маршруты с немного большей вложенностью, чтобы получить нужные вам URL-адреса (и вам не нужно иметь оператор возврата в вашем маршрутизаторе):

    App.Router.map(function() {
      this.resource("profile", function() {
        this.resource("userprofile", { path: '/:userId' }, function() {
          this.route("index", { path: '/' });
          this.route("activity", { path: '/activity' });
        });
      });
    });
    

    а затем настройте свои маршруты следующим образом:

    App.IndexRoute = Ember.Route.extend({
      model: function(params) {
        return [Ember.Object.create({
          id: 1
        })];
       }
    });
    
    App.UserprofileIndexRoute = Ember.Route.extend({
      model: function(params) {
        console.log("userindex route", params);
        return Ember.Object.create({
          id: 1
        });
      },
      setupController: function(controller, model) {
        return controller.set("content", model);
      }
    });
    
    App.UserprofileActivityRoute = Ember.Route.extend({
      model: function(params) {
        return Ember.Object.create({
          id: 1
        });
      },
      setupController: function(controller, model) {
        return controller.set("content", model);
      }
    });
    

    Вы можете ссылаться на страницу /profile/1 :

    {{#linkTo userprofile.index user}}
    

    или ссылку на страницу /profile/1/activity :

    {{#linkTo userprofile.activity user}}
    
    4
    добавлено
    Ember_js
    Ember_js
    153 участник(ов)

    Cообщество Ember.js