使用Ember数据获取单个记录 - 非传统URL格式

时间:2014-01-18 22:51:48

标签: ember.js ember-data

我的服务器API有一个路径'/ user',它根据客户端的身份验证cookie获取SINGLE用户记录,而不是ID。

如何在Ember Data中进行此调用?

2 个答案:

答案 0 :(得分:1)

覆盖用户适配器上的pathForTypebuildUrl

App.UserAdapter= DS.RESTAdapter.extend({
  pathForType: function(type) {
    var decamelized = Ember.String.decamelize(type); 
    //return Ember.String.pluralize(decamelized);
    return decamelized;
  },
  buildURL: function(type, id) {
    var url = [],
        host = get(this, 'host'),
        prefix = this.urlPrefix();

    if (type) { url.push(this.pathForType(type)); }
    if (id!==-1) { url.push(id); }  // This will exclude the id for this request

    if (prefix) { url.unshift(prefix); }

    url = url.join('/');
    if (!host && url) { url = '/' + url; }

    return url;
  },
});

然后使用

this.store.find('user', -1);

http://emberjs.jsbin.com/OxIDiVU/147/edit

答案 1 :(得分:0)

我不知道你想如何获取用户,但不管怎样,你都想创建自己的适配器。您可能希望覆盖一种或多种查找方法(findfindAllfindManyfindQuery),具体取决于您的具体情况。首先检查类型是否为user。如果是,请实现您的自定义逻辑。如果没有,只需在你扩展的适配器上调用super方法。

如果您向我提供有关您希望如何访问用户模型的更多信息,我可能会提供更多帮助。

编辑:您似乎只需要覆盖buildURL功能。您可能必须返回的不仅仅是/user,例如主机和前缀,但这应该为您提供要点。检查REST适配器的the source以查看默认情况下它们是如何执行的。

App.ApplicationAdapter = DS.RESTAdapter.extend({
    buildUrl: function(type, id) {
        if (type.typeKey === 'user' && id === 1) {
            return '/user';
        } else {
            return this._super.buildUrl.apply(this, arguments);
        }
    }
});