我想知道如何在其余的api中创建一个具有嵌套路径的资源。
例如,给定员工资源的终点, /公司/ {}公司/员工/ {}员工
如何创建员工记录。 我创建了一个员工模型,但请求将进入顶级/。 发送带有员工数据的发布请求到/.
我应该覆盖适配器上的pathForType()吗?
答案 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。
如果您正在讨论将数据发送到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";
}
})
});
注意在调用buildURL之前必须设置App.companyID。我会在CompanyRoute中执行此操作并将其设置为此
model: function (params) {
App.set('companyID', params.company_id);
}