如何自定义Ember RESTAdapter调用的URL?

时间:2016-10-11 10:28:28

标签: javascript ember.js

在我们的Ember应用程序中,我有3种不同的模型:

  • 组织
  • 用户
  • 问题

问题由属于组织的用户创建。 organizationsusers都有一个issues数组,其中包含一组属于issues模型的问题ID。例如,这就是users模型的样子:

// app/models/users.js
export default DS.Model.extend({
    name: DS.attr('string'),
    email: DS.attr('string'),
    belongsTo: DS.belongsTo('organizations'),
    issues: DS.hasMany('issues')
});

我们有两个API来查看所有问题的列表:

  • GET /users/:userId/issues - 此API可解决用户创建的所有问题
  • GET /organizations/:organizationId/issues - 此API获取属于此组织的用户创建的所有问题

问题是,当我调用this.store.findAll('issues');时,Ember RESTAdapter默认调用GET /issues。我无法想办法让RESTAdapter调用上面的任何URL。我无法使用this.store.findRecord('issues', 1);,因为它通过ID GET /issues/:issueId等ID来调用特定问题。如何让RESTAdapter调用上述URL而无需手动发出AJAX请求并将API响应推送到Ember Data?

1 个答案:

答案 0 :(得分:0)

您需要自定义您的适配器(据我所知,您可以根据需要为每个型号配备一个适配器。)

在您的具体示例中,我认为您要自定义urlForFindAll方法。

// maybe in app/organization/adapter.js (if using pods for a model specific  adapter)
urlForFindAll(modelName) {
    return 'urlYouWantToUseWithOrganizations';
}

关于这种情况的好文章在Ember Igniter