Javascript EmberJS:自定义相关模型的REST URL

Javascript EmberJS:自定义相关模型的REST URL,javascript,ember.js,adapter,Javascript,Ember.js,Adapter,在报告中,它提到了这一点: 适配器是了解特定服务器的对象 后端,负责将请求和更改转换为 记录到对服务器的相应调用中 例如,如果您的应用程序要求使用ID的person记录 余烬数据应该如何加载呢?URL是/person/1还是/resources/people/1 在我的示例中,我有一个包含相关消息的用户模型。当Ember store为用户检索相关消息时,它会以/messages/?ids=18的形式生成一个查询,如下所示: user = this.store.find('user', param

在报告中,它提到了这一点:

适配器是了解特定服务器的对象 后端,负责将请求和更改转换为 记录到对服务器的相应调用中

例如,如果您的应用程序要求使用ID的person记录 余烬数据应该如何加载呢?URL是/person/1还是/resources/people/1

在我的示例中,我有一个包含相关消息的用户模型。当Ember store为用户检索相关消息时,它会以/messages/?ids=18的形式生成一个查询,如下所示:

user = this.store.find('user', params.user_id);
user.get('messages');
我想用/users/2/messages/这样的URL加载这些消息


我查阅了Ember关于适配器的文档,没有找到任何具体实现此功能的方法。如何自定义URL?

您可以创建一个消息适配器,为端点构建正确的URL

import Ember from 'ember';

import DS from 'ember-data';

export default DS.ActiveModelAdapter.extend({

  find: function(store, type, id) {
    return this.ajax(this.buildURL(type.typeKey, id), 'GET');
  },

  createRecord: function(store, type, record) {
    var data = {};
    var serializer = store.serializerFor(type.typeKey);

    serializer.serializeIntoHash(data, type, record, { includeId: true });
    return this.ajax(this.buildURL(type.typeKey, null), "POST", {data: data});
  },

  buildURL: function(type, id) {
    var url = [],
        host = Ember.get(this, 'host'),
        prefix = this.urlPrefix(),
        user_id = this.container.lookup('controller:user').get('id');

    // append user and id to the url
    url.push('users/' + user_id);

    if (type) { url.push(this.pathForType(type)); }
    if (id) { url.push(id); }

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

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

    return url;
  }

});
我希望这是有帮助的

干杯