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

时间:2014-01-13 08:54:11

标签: ember.js ember-data

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

例如,给定员工资源的终点, /公司/ {}公司/员工/ {}员工

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

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

1 个答案:

答案 0 :(得分:1)

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

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

创建类似于:index.html /#/ companies / {company} / employees / {employee}

这将创建嵌套在该路线中的CompaniesRoute和EmployeesRoute。如果你已经设置了它,可以在ember检查器中很好地查看。

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

请参阅routing documentation here

如果您正在讨论将数据发送到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";
        }
    })
});

另见RESTAdapter doco here

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

model: function (params) {
   App.set('companyID', params.company_id);
}