1

我目前有我的路线设置,所以所有的船都在根部/,我可以去特定的船去/boats/:boat_id

无论出于何种原因,如果我将 ID 设置为:boat_id,则根目录将不会显示任何船只并在控制台中引发此错误:

断言失败:无法在未定义的对象上调用带有“id”的 get。

如果我将其更改为 just :id,则根工作正常但/boats/{any id}不起作用。有任何想法吗?

这是我的代码:

BoatBuilder.Router.map(function() {
  this.resource('boats', { path: '/' });
  this.resource('boat', { path: '/boat/:boat_id' }, function() {
    this.route("motor");
    this.route("accessories");
  });

  this.route("summary");
});

BoatBuilder.BoatsRoute = Ember.Route.extend({
  model: function () {
    return BoatBuilder.Boat.find();
  }
});

BoatBuilder.Boat = DS.Model.extend({
  iem_name: DS.attr('string'),
  url_text: DS.attr('string'),
  price_retail: DS.attr('number')
});
4

3 回答 3

1

如果你的模型没有在 url 中使用 id 属性,你应该在你的路由上定义一个序列化方法。请参阅http://emberjs.com/guides/routing/defining-your-routes/

此外,如果您通过#linkTo 访问/boats/:boat_id,您还需要在路由器中添加序列化挂钩。

改编自我上面粘贴的 ember guides 链接,应该是这样的:

 App.Router.map(function() {
    this.resource('boat', { path: '/boat/:boat_id' };
 });

 App.BoatRoute = Ember.Route.extend({
      model: function(params) {
           // the server returns 

      },

    serialize: function(model) {
       // this will make the URL `/boat/:boat_id`
     return { boat_id: model.id };
    }
 });

您可能需要对其进行调整以满足您的需要。

于 2013-07-17T23:44:58.943 回答
0

不要认为您需要资源,boats因为您内部没有嵌套路由。所以试试:

BoatBuilder.Router.map(function() {
  this.route('boats', { path: '/' });
  this.resource('boat', { path: '/boat/:boat_id' }, function() {
    this.route("motor");
    this.route("accessories");
  });

  this.route("summary");
});
于 2013-07-17T20:39:42.730 回答
0

如果我将其更改为 :id,则根目录可以正常工作,但 /boats/{any id} 不起作用。有任何想法吗?

使用您的实际路由器地图应该不是这样去特定的船吗?

/boat/:boat_id

和所有这样的船:

/
于 2013-07-17T20:25:56.347 回答