Javascript Ember数据-REST JSON API-服务器用嵌套URL响应-建议的配置是什么?
我试图找到一种推荐的方法来配置Ember数据,以使用来自使用嵌套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
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');
});
});
});