数据使用ember为REST请求加载的URL

在我现在正在使用的系统上,我不得不尝试驯服一些关于它如何执行REST请求的ember-data。 默认情况下,默认情况下,ember-data会为某个模型的某个请求指定URL,但这种方式不会在我使用的后端中删除。

我需要的是,让ember-data使用ember加载的相同URL,但使用'?json'后缀。 也就是说,如果ember将页面切换到我的乐队页面,并且url是/ bands,我希望ember-data为它需要的数据请求/ bands?json,而不是从模型名称中得出结果。 有人可能会说,我希望URL是根据加载路径的路径来计算的,而不是使用的模型的名称。

我试图通过继承DS.RESTAdapter {}来查看我是否可以使用buildURL方法来执行此操作,但我无法弄清楚如何获取要加载的URL烬线。 在ember更改位置之前调用buildURL方法,所以我不能使用document.location.href或其他东西。 我可以想象我需要一种方法来问问现在正在加载的内容以及URL的内容。

任何想法如何做到这一点?

UPDATE

没有任何令人满意的解决方案,所以我决定只是用肮脏的方式来做。 就是这个:

App.RouterSignature = [
    ['index',        '/',                   '/index_models'],
    ['bands',        '/bands',              '/band_models'],
    ['band',         '/band/:band_slug',    '/band_model']
];

App.Router.map(function() {
    for (var i = 0; i < App.RouterSignature.length; i++) {
        var route = App.RouterSignature[i];
        this.resource(route[0], {path: route[1]});
    }
});

App.CustomAdapter = DS.RESTAdapter.extend({
    buildURL: function(record, suffix) {
        var url,
            suffix = '?json',
            needle = this._super(record);

        for (var i = 0; i < App.RouterSignature.length && !url; i++) {
            var route = App.RouterSignature[i];
            if (route[2] == needle)
                url = route[1];
        }

        return url + suffix;
    }
});

现在,App.Routes和DS.RESTAdapter.buildURL基于相同的数据。 App.RouterSignature列表中的前两个值只是路由的名称,即路由的路径。 第三个值是DS.RESTAdapter.buildURL默认猜测的值应该是url。 然后,我的自定义适配器进行猜测,将其与App.RouterSignature列表中的其中一个项目进行匹配,然后从该项目获取第二个值 - 路径路径。

现在,ember-data所做的请求与路由路径的URL相同。


你可以尝试像这样设置适配器:

 App.Adapter = DS.RESTAdapter.extend({
   ...
   buildURL: function(record, suffix){
     return this._super(record, suffix) + "?json";
   }
 });

 App.Store = DS.Store.extend({
   ...
   adapter: App.Adapter.create();
   ...
 });

有关RESTAdapter buildURL方法的更多信息,请参阅此处。 希望能帮助到你

链接地址: http://www.djcxy.com/p/90949.html

上一篇: data use the URL that ember is loading for the REST request

下一篇: data really support nested urls?