Ember中是否有办法为特定模型配置自定义REST URL?
与此型号一样:
App.Post = DS.Model.extend({
title: DS.attr('string'),
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
content: DS.attr('string'),
post: DS.belongsTo('App.Post')
});
这个商店:
app.Store = DS.Store.extend({
revision : 11,
adapter : DS.RESTAdapter.extend({
namespace : 'rest'
})
});
我希望通过/rest/post/{id}/comments
而非/rest/comments
检索评论,这是默认行为。
是否可以为一个特定模型配置rest-url?
答案 0 :(得分:2)
您可以注册一个额外的适配器并将其“范围”到您的模型中。
App.Store.registerAdapter('App.Post', DS.RESTAdapter.extend({
url: "/rest/post/"
}));
答案 1 :(得分:1)
这对于整个应用程序中的一个模型来说是真的,还是这是您的REST后端使用的默认“hasMany”uri?我问,因为我的api(django rest框架)使用了这个确切的uri,它需要对ember-data项目进行完整的拉取请求,因为要构建适配器需要相关“父”或“所有者”的URL(rails devs never never需要所以它不存在。)
我会编写你自己的适配器(只是基类适配器的子类,所以你只能覆盖不同的单个hasMany)。我为我的适配器编写的方法如下,这是我的完整适配器供参考。
这是ember-data revision 11友好btw(尚未升级到12)
https://github.com/toranb/ember-data-django-rest-adapter/blob/master/tests/adapter.js
findMany: function(store, type, ids, parent) {
var json = {}
, root = this.rootForType(type)
, plural = this.pluralize(root)
, ids = this.serializeIds(ids)
, url = this.buildFindManyUrlWithParent(store, type, ids, parent);
this.ajax(url, "GET", {
success: function(pre_json) {
json[plural] = pre_json;
Ember.run(this, function(){
this.didFindMany(store, type, json);
});
}
});
},