修改
我通过升级到EmberJS RC4来解决这个问题。此版本不会自动调用路径上的模型挂钩,这允许以下内容:
App.LiftsRoute = Ember.Route.extend({
setupController: function(controller, model) {
controller.set('content', App.Lift.find({
county: model.county || model.id
}));
}
});
编辑结束
我正在尝试在EmberJS&中添加带有动态细分的路线。 Ember Data w / RESTful Adapter返回一个数组,但是我失败了。
App.Router.map(function() {
this.route('lifts', { path: '/lifts/:county' });
});
App.LiftsRoute = Ember.Route.extend({
model: function(params) {
return App.Lift.find(params.county);
}
});
App.Lift = DS.Model.extend({
name: DS.attr('string'),
date: DS.attr('number'),
description: DS.attr('string'),
destination: DS.attr('string')
});
这会返回以下错误:
未捕获错误:断言失败:您的服务器返回了一个带有提升键的哈希,但是没有映射。
来自JSON的形式{lifts:[{id:1,name:“xyz”,...},{id:2,name:“abc”,...]}
有什么想法吗?
答案 0 :(得分:1)
编辑:设置包含单个动态细分的路线以返回对象数组
您仍然可以保持相同的路线结构:
this.route('lifts', { path: '/lifts/:county_ids' });
然后覆盖model
挂钩以将params.county_ids
解析为查询字符串:
model: function(params) {
ids = parseQueryIds(params.county_ids) // you have to parse this in a format that your server will accept
App.Lift.find({query: ids}) // returns an record array
}
这将保留网址结构(如果您转到/lifts/1,2,3
,该网址将被保存),但也会返回一系列项目。
结束编辑
发生这种情况是因为App.Lift.find
在传递字符串时会尝试按id查询单个对象,但是来自服务器的响应会返回多个对象(id 1,id 2等)。
执行App.Lift.find(params.county)
时(假设params.county
为“1”),Ember会生成GET '/lifts/1'
。但无论出于何种原因,您的服务器都使用具有数组的密钥返回JSON。
你能检查一下吗
App.Lift.find(params.county)
要求的资源是什么?params.county
?如果它未定义,您将调用App.Lift.find(undefined)
,这使得GET为/lifts
,这可能导致您的服务器返回对象数组。答案 1 :(得分:0)
出现错误消息,因为JSON对象的root id是复数,并且应该是单数。您的服务器应该返回:
{lift: [
{id: 1, name: "xyz", ...},
{id: 2, name: "abc", ...}
]
}
您很可能随后遇到Sherwin描述的问题,因为RESTAdapter的find()假定要返回一个单例。