我想在Ember中使用动态段路径而不使用:id
属性
根据Ember Guides,我正在使用serialize
方法来实现这一目标。
继承我的路由器:
App.Router.map(function() {
this.resource("orders", function(){
this.resource('order', { path: ':order_sequence'}, function(){
this.route('edit');
})
});
});
我的路线:
var OrderRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('order', params.order_sequence)
},
serialize: function(model) {
return { order_sequence: model.get('sequence') };
}
});
module.exports = OrderRoute;
但是,我的网址仍然使用路径中的id
属性而不是sequence
属性。
有什么想法吗?
答案 0 :(得分:1)
您的浏览器是否缓存了某些内容,因为这是正确的。您是否在任何transitionTo / transitionToRoute / link-to中传递id而不是序列/模型?
哦,你不是在谈论url中的slu ,,也不是路线,你在谈论模型的id。您需要为该特定模型创建一个序列化程序并覆盖主键
App.OrderSerializer = DS.RESTSerializer.extend({
primaryKey: 'sequence'
});
Fixture Adapter对定义id有一个约束,但你可以通过扩展fixture数据包并覆盖单个方法来懒散地解决它
App.OrderAdapter = DS.FixtureAdapter.extend({
fixturesForType: function(type) {
if (type.FIXTURES) {
var fixtures = Ember.A(type.FIXTURES);
return fixtures.map(function(fixture){
// aka we massasge the data a bit here so the fixture adapter won't whine so much
fixture.id = fixture.sequence;
var fixtureIdType = typeof fixture.id;
if(fixtureIdType !== "number" && fixtureIdType !== "string"){
throw new Error(fmt('the id property must be defined as a number or string for fixture %@', [fixture]));
}
fixture.id = fixture.id + '';
return fixture;
});
}
return null;
},
});