RESTAdapter:如何使用嵌套路径创建资源

Ash*_*n S 7 ember.js ember-data

我想知道如何在其余的api中创建一个具有嵌套路径的资源.

例如,给定员工资源的终点,/ companies/{company}/employees/{employee}

如何创建员工记录.我创建了一个员工模型,但请求将进入顶级/.发送带有员工数据的发布请求到/.

我应该覆盖适配器上的pathForType()吗?

Tre*_*Dev 2

如果您正在谈论 ember 路由器路径,那么我就是这样做的:

App.Router.map(function () {
    this.resource('companies', {path: 'companies/:company_id'}, function () {
       this.resource('employees', {path: 'employees/:employee_id'});
    });
});
Run Code Online (Sandbox Code Playgroud)

这会创建类似以下内容的内容:index.html/#/companies/{company}/employees/{employee}

这将创建嵌套在该路由中的 CompaniesRoute 和EmployeesRoute。如果您进行了设置,则可以在 ember 检查器中很好地查看它。

Ember将首先进入CompansRoute,然后进入EmployeesRoute。

请参阅此处的路由文档

如果您正在谈论将数据发送到 REST API 服务器,那么一种解决方案是覆盖 buildURL,例如:

App.Store = DS.Store.extend({
    adapter: DS.RESTAdapter.extend({
        host: "http://whatever", 
        buildURL: function (type, id) {
            var url = [];
            url.push(this.urlPrefix());
            url.push("companies/" + App.companyID + "/employee/" + App.employeeID );
            url.push(this.pathForType(type));
            if (id) {
                url.push(id);
            }
            return url.join('/') + ".json";
        }
    })
});
Run Code Online (Sandbox Code Playgroud)

另请参阅此处的 RESTAdapter doco

注意 在调用 buildURL 之前必须设置 App.companyID。我会在 CompanyRoute 中执行此操作并将其设置为这样

model: function (params) {
   App.set('companyID', params.company_id);
}
Run Code Online (Sandbox Code Playgroud)