5

我不知道如何在 EmberJS 的新路由器 API 中创建具有动态段的路由。我已经花了一个星期的时间尝试了很多东西,但它不起作用。我对自己感到非常沮丧,因为我已经多次阅读了文档、API 和源代码,但无法弄清楚如何完成这项工作。我渴望得到帮助。

我正在尝试实现以下路线:

  • /profile/:userId -> 索引
  • /profile/:userId/activity -> 活动页面
  • /profile/:userId/...

我的路由器是这样设置的

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

然后,每当我尝试与linkTo帮助程序链接时,都会收到以下错误:Uncaught More objects were passed than dynamic segments

<li>{{#linkTo "profile.index" user}}overview{{/linkTo}}</li>

如果我不包含该user对象,那么我会收到另一个错误Uncaught Error: assertion failed: Cannot call get with 'id' on an undefined object.(显然是因为没有对象可以获取其 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);
  }
});
4

1 回答 1

4

JSBin 示例

你可以用更多的嵌套来构造你的路由以获得你想要的 URL(并且你不需要在你的路由器中有一个 return 语句):

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}}
于 2013-02-07T15:26:28.947 回答