Ember:使用id之外的其他内容返回一条记录

时间:2014-08-30 22:37:06

标签: ember.js ember-data

假设我想要/users/JoshSmith这样的网址,以获得最大的可读性/可共享性。

我设置了Router

this.resource('user', path: '/users/:username')

我的路线:

var UserRoute = Ember.Route.extend({
  model: function(params) {
    debugger
    return this.store.find('user', { username: params.username });
  }
});

但是这个findQuery函数实际上返回一个数组,因为它正在调用/users?username=而不是像我通常那样调用/users/:username

对于我应该如何处理这个问题,我有点迷茫;我假设那里有一个约定,我找不到它。

2 个答案:

答案 0 :(得分:0)

正如此处所示:http://discuss.emberjs.com/t/find-by-different-property/2479

只需覆盖路线上的序列化。

var UserRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('user', { username: params.username });
  },
  serialize: function(model) {
    return { username: model.get('username') };
  }
});

这将替换默认值,如下所示:

serialize: function(model) {
  // this will make the URL `/posts/12`
  return { post_id: model.id };
}

来源:http://emberjs.com/api/classes/Ember.Route.html#method_serialize

答案 1 :(得分:0)

我也有同样的问题,findQuery总是返回一个记录数组。我解决这个问题的方法是简单地将路由器中的model挂钩更改为

model: function(params) {
 return this.store.find('user', { username: params.username }).then(function(users) {
    return users.get('firstObject');
 });
}