针对特定模型的自定义REST URL

时间:2013-03-06 12:12:45

标签: rest ember.js ember-data

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?

2 个答案:

答案 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);
                });
            }
        });
    },