Javascript Ember数据-REST JSON API-服务器用嵌套URL响应-建议的配置是什么?

Javascript Ember数据-REST JSON API-服务器用嵌套URL响应-建议的配置是什么?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我试图找到一种推荐的方法来配置Ember数据,以使用来自使用嵌套URL的服务器的数据。到目前为止,我尝试了以下方法: 覆盖buildURL 覆盖findAll 它有点工作,但我不喜欢访问ID的方式。我尝试访问参数或这个。在buildURL或findAll中获取(…),但没有成功 指定模型关系 -所以我试着: App.Color = DS.Model.extend({ name: DS.attr('string'), subcolors: DS.hasMany('App.Subco

我试图找到一种推荐的方法来配置Ember数据,以使用来自使用嵌套URL的服务器的数据。到目前为止,我尝试了以下方法:

覆盖
buildURL


覆盖
findAll

它有点工作,但我不喜欢访问ID的方式。我尝试访问
参数
这个。在
buildURL
findAll
中获取(…)
,但没有成功


指定模型关系 -所以我试着:

App.Color = DS.Model.extend({
  name: DS.attr('string'),
  subcolors: DS.hasMany('App.Subcolor'),
});   

App.Subcolor = DS.Model.extend({
  name: DS.attr('string'),
  color: DS.belongsTo('App.Color'),
});  

App.Router.map(function() {
  this.resource('color', function(){
    this.route('show', { path: ':color_id' }, function() {
      this.route('subcolor');
    });
  });
});
但向
/subcolors
发出的请求失败




Ember.ENV.ENABLE\u DS\u FILTER=true;
App=Ember.Application.create();
App.ApplicationAdapter=DS.RESTAdapter;
App.Router.map(函数(){
this.resource('color',function()){
this.route('show',{path:':color_id',function()){
这条路线(“亚颜色”);
});
});
});
App.Color=DS.Model.extend({
名称:DS.attr('string'),
子颜色:DS.hasMany('App.Subcolor'),
});   
App.Subcolor=DS.Model.extend({
名称:DS.attr('string'),
颜色:DS.belongsTo('App.color'),
});  
App.IndexRoute=Ember.Route.extend({
模型:函数(){
返回此.store.find('color');
}
});         
App.ColorShowSubcolorRoute=Ember.Route.extend({
模型:函数(){
返回此.store.find('subcolor');
}
});
//方法1
//  
//
//
// http://emberjs.com/api/data/classes/DS.RESTAdapter.html#method_buildURL
//正如这里所建议的:https://stackoverflow.com/a/30458763/775359
//App.SubcolorAdapter=DS.RESTAdapter.extend({
//buildURL:函数(类型、id、快照、请求类型、查询){
//var urlParts=location.hash.split(“/”);
//var parentId=urlParts[2];
//var url=“/colors/”+parentId+”/subcolors”;
//返回url;
//   }
// });
//方法2
//  
//
//
// http://emberjs.com/api/data/classes/DS.Adapter.html#method_findAll
//正如这里所建议的:https://stackoverflow.com/a/24411550/775359
//App.SubcolorAdapter=DS.RESTAdapter.extend({
//findAll:函数(存储、类型、sinceToken){
//var urlParts=location.hash.split(“/”);
//var parentId=urlParts[2];
//var url=“/colors/”+parentId+”/subcolors”;
//返回新的Ember.RSVP.Promise(函数(解析、拒绝){
//getJSON(url).then(函数(数据){
//运行(空、解析、数据);
//},函数(jqXHR){
//jqXHR.then=null;
//运行(null、拒绝、jqXHR);
//       });
//     });
//   }
// });
{//模拟AJAX请求(虚拟大括号,以便我可以在编辑器中折叠)
$.mockjax({
键入:“GET”,
url:“/colors”,
数据类型:“json”,
答复正文:{
“颜色”:[
{id:1,名称:“Red”},
{id:2,名称:“Blue”},
]
}
});      
$.mockjax({
键入:“GET”,
url:“/colors/1”,
数据类型:“json”,
答复正文:{
“颜色”:[
{id:1,名称:“Red”}
]
}
}); 
$.mockjax({
键入:“GET”,
url:“/colors/2”,
数据类型:“json”,
答复正文:{
“颜色”:[
{id:2,名称:“Blue”}
]
}
});       
$.mockjax({
键入:“GET”,
url:“/colors/1/subcolors”,
数据类型:“json”,
答复正文:{
“亚颜色”:[
{id:1,名称:“浅红色”},
{id:2,名称:“深红色”}
]}
});    
$.mockjax({
键入:“GET”,
url:“/colors/2/subcolors”,
数据类型:“json”,
答复正文:{
“亚颜色”:[
{id:3,名称:“浅蓝色”},
{id:4,名字:“深蓝色”}
]}
});
}

指数
    {{#模型中的每种颜色}
  • {{{链接到“color.show”color}{{color.name}{{{/链接到}}
  • {{/每个}}
色彩/表演 {{{#链接到“应用程序”}返回列表{{/link to}
{{model.name}
{{{#链接到“color.show.subcolor”模型}转到子颜色{{/link to} {{outlet}} 颜色/显示/亚颜色
    {{{#模型中的每个子颜色}
  • {{subcolor.name}
  • {{/每个}}

您所说的“嵌套URL”到底是什么意思?您可以显示来自服务器的JSON响应吗?通常,您可以在路由器中嵌套
route
调用,而不必覆盖服务器的
buildUrl
findAll
响应-显示代码片段-您将看到我正在模拟的一些示例数据。。。(总共有5个请求)我的实际API在这一点上有点僵化,所以我宁愿配置Ember数据。到目前为止,我的理论方法是为顶级资源提供一个服务和适配器,以便在一个路由钩子集中导航到
/colors/1
时,为您的示例
ColorAdapter
ColorService
ColorService.colorId
1
并在您的模型中为
/colors/1/subcolors
调用类似
ColorService.getSubcolors
的方法,该方法调用适配器
ColorAdapter.fetchSubColors
Hi@MichalStefanow您找到使用ED获取嵌套资源的好方法了吗?Hi@hernanvicente-这是一个漫长的过程很久以前,我不记得是怎么解决的。如果我有一个简单明了的答案,那么我会自己回答这个问题……你说的“嵌套URL”到底是什么意思?您可以显示来自服务器的JSON响应吗?通常,您可以在路由中嵌套
route
呼叫
App.SubcolorAdapter = DS.RESTAdapter.extend({
  findAll: function(store, type, sinceToken) {
    var urlParts = location.hash.split("/"); // don't like the way how I'm accessing it
    var parentId = urlParts[2];
    var url = "/colors/" + parentId + "/subcolors";
    return new Ember.RSVP.Promise(function(resolve, reject) {
      jQuery.getJSON(url).then(function(data) {
        Ember.run(null, resolve, data);
      }, function(jqXHR) {
        jqXHR.then = null;
        Ember.run(null, reject, jqXHR);
      });
    });
  }
});
App.Color = DS.Model.extend({
  name: DS.attr('string'),
  subcolors: DS.hasMany('App.Subcolor'),
});   

App.Subcolor = DS.Model.extend({
  name: DS.attr('string'),
  color: DS.belongsTo('App.Color'),
});  

App.Router.map(function() {
  this.resource('color', function(){
    this.route('show', { path: ':color_id' }, function() {
      this.route('subcolor');
    });
  });
});