更改ID值时,Ember失败

时间:2013-07-17 20:06:31

标签: routing ember.js

我目前已设置路线,以便所有船只都位于根/,我可以前往/boats/:boat_id

进入特定船只

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

  

断言失败:无法在未定义的对象上使用'id'调用get。

如果我将其更改为: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')
});

3 个答案:

答案 0 :(得分:1)

如果您的模型未在网址中使用id属性,则应在路由上定义序列化方法。请参阅http://emberjs.com/guides/routing/defining-your-routes/

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

改编自上面粘贴的余烬指南链接,它应该是这样的:

 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 };
    }
 });

您可能需要调整它以满足您的需要。

答案 1 :(得分:0)

  

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

使用你的实际路由器地图应该去特定的船吗?

/boat/:boat_id

所有的船都是这样的:

/

答案 2 :(得分: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");
});