2013-07-17 79 views
1

目前,我有我的路線設置時,讓所有的船隻是在根/,我可以去特定的船前往/boats/:boat_id灰燼改變ID值

無論出於何種原因,如果我離開的ID集失敗到:boat_id,那麼根本不會顯示任何船隻,並在控制檯引發此錯誤:

斷言失敗:不能叫有「身份證」得到一個未定義的對象上。

如果我將它更改爲: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') 
}); 
+0

如果我建議的解決方案解決了您的問題,您可以提供反饋嗎?乾杯。 – brg

回答

0

如果我改變它只是:ID,然後根工作正常,但/船/ {任何ID}不起作用。有任何想法嗎?

使用你的實際路由器地圖應該去特定的船不是這樣嗎?

/boat/:boat_id 

,所有的船隻是這樣的:

/ 
+0

試過,沒有骰子:-( – WebDevDude

+0

@WebDevDude,編輯了我的答案,正在做什麼我在做什麼,我提到? – intuitivepixel

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

如果您的模型不使用url中的id屬性,則應該在路由中定義一個serialize方法。見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 }; 
    } 
}); 

您可能需要調整它來滿足你的需要。