3

我对 Ember 非常、非常、非常陌生 :-)

我有一个 DS.Model,我想在其中强制使用 .json 进行扩展,以便从 Rails 服务器检索数据。

来自服务器的 url 正在工作,我可以在浏览器的调试器中看到,该 url 不是 DS.model url 中指定的

var App = Ember.Application.create();

App.store = DS.Store.create({
 adapter:  DS.RESTAdapter.create({url: 'http://127.0.0.1:3000'}),
revision: 8
});


App.Expedient = DS.Model.extend({
  url: 'expedients/%@.json',
  procedencia: DS.attr('string'),
  interessat_nom: DS.attr('string'),
  data_signatura_provisional: DS.attr('date')
});

手动获取权宜之计:

var model2 = App.store.find(App.Expedient, 125000);

输出控制台:

OPTIONS http://127.0.0.1:3000/expedients/125000 404 (Not Found) 

我想成为这样的网址:

http://127.0.0.1:3000/expedients/125000.json 

此外,我还尝试用另一个不同的名称真正更改 DS.Model url,如下所示:

App.Expedient.reopenClass({
 url: 'mockurl/%@.json'
});

但是浏览器的控制台和以前一样有'url',我不知道为什么Ember-Data没有得到模型的url。

谢谢!

问候,

附言。从两个来源测试 Ajax 时,我知道 Access-Control-Allow-Origin CORS 问题

4

3 回答 3

5

由于某种原因,github 现在无法正常工作,所以我无法查看 ember 的源代码,但我认为您可以执行以下操作:

var adapter = DS.RestAdapter.extend({
  buildURL: function(record, suffix) {
    var s = this._super(record, suffix);
    return s + ".json";
  })
});

您需要将其插入您的商店而不是默认的休息适配器。

于 2012-11-30T18:12:58.847 回答
2

我刚刚用我的 RESTAdapter 子类尝试了这个,它正在工作:

 App.WORESTAdapter = DS.RESTAdapter.extend({
    ...
    buildURL: function(record, suffix){
       return this._super(record, suffix) + ".json";
    }
})
于 2012-12-01T21:38:54.830 回答
0

由于您使用的是 rails 后端,是否更容易使您的 API 适应 Ember.data 期望的相同约定?所以在你的expedientsController#show行动中:

def show
  @expedient = Expedient.find(params[:id])
  render json: @expedient
end

只要您的控制器返回 JSON 结构 Ember 期望它应该映射到您DS.Model看到:this ember guide

于 2013-08-30T17:43:49.617 回答