具有复杂URL的Ember数据

时间:2015-07-19 07:23:20

标签: ember.js ember-data

试图解决此问题几天。

通常我使用Embers转换从商店获取模型:

{{1}}

这将解析为GET => DS:RESTAdapter#ajax GET到http://localhost:8080/api/numbers

但我无法找到针对此网址执行请求的方法: http://localhost:8080/api/profiles/:profile_id/workspaces

顺便说一句 http://localhost:8080/api/profiles/:profile_id不返回迭代工作空间的键。获取所有工作区的唯一方法是通过直接网址。

1 个答案:

答案 0 :(得分:2)

这不是REST适配器构建URL的常用方法。至少你需要为工作空间模型制作一个特殊的适配器,然后你需要覆盖urlForQuery(如果它是特定于请求的)并指定并移动_buildURL内部的一些逻辑到那个

<强>适配器/ workspaces.js

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  urlForQuery: function(query, modelName){
    var url = ['api','profiles', query.profile, 'workspaces'];
    delete query.profile;
    var host = this.get('host');
    var prefix = this.urlPrefix();

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

    return url;
  }
});

然后你做这样的事情:

OlaMagic.DashboardIndexRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.query('workspace', {profile: 1});
  }
});

这将生成对 / api / profiles / 1 / workspaces 的请求。

如果您只是在当前用户上请求工作区,那么只需覆盖init适配器上的workspaces并在其上设置更深的namespace就足够了认证