自定义动态细分(NOT ID) - EmberJS

时间:2013-11-17 07:17:10

标签: ember.js ember-router

我想在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属性。

有什么想法吗?

1 个答案:

答案 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;
 },
});