我从控制台得到一个非常不透明的错误消息(在我看来我没有参考资料的意义上是不透明的),我不完全确定在哪里看,我觉得它可能是库代码中的错误但是在发布到github上之前我会仔细检查一下这不是我自己的错。
问题很简单,我正在调用this.store.find('player')
,希望获得所有玩家的列表,然后以某种列表显示它们,但我甚至没有超过装载部分。数据从服务器中提取并且看起来格式正确,但在route.model
方法调用之后似乎失败了。并且错误消息似乎在ember.js
库代码中的某处,没有任何指向我自己的代码。
内容类型当然是application/json
,请注意id
属性实际上是_id
。
[
{
"_id":"55405a5102b4ed623c225e87",
"alias":"mikeTest",
"__v":0,
"scans":[],
"createdAt":"2015-04-29T04:13:05.223Z"
}
]
请注意,堆栈跟踪的一部分指向我的源,仅指向Ember
源。这让调试变得很麻烦。
Error while processing route: leader Cannot read property 'match' of undefined TypeError: Cannot read property 'match' of undefined
at Ember.DefaultResolver.extend.podBasedComponentsInSubdir (http://localhost:4200/assets/vendor.js:60138:76)
at http://localhost:4200/assets/vendor.js:60190:34
at Array.exports.default.mixin.Mixin.create.find (http://localhost:4200/assets/vendor.js:39572:30)
at Ember.DefaultResolver.extend.findModuleName (http://localhost:4200/assets/vendor.js:60188:44)
at resolveOther (http://localhost:4200/assets/vendor.js:60051:37)
at superWrapper (http://localhost:4200/assets/vendor.js:28141:20)
at exports.default.EmberObject.default.extend.resolve (http://localhost:4200/assets/vendor.js:15454:35)
at Object.resolve [as resolver] (http://localhost:4200/assets/vendor.js:15217:23)
at resolve (http://localhost:4200/assets/vendor.js:12792:29)
at Object.Registry.resolve (http://localhost:4200/assets/vendor.js:12336:21)
这个ember app非常年轻,所以目前来源很少,但这是目前所有相关的来源。
import Ember from 'ember';
import config from './config/environment';
var Router = Ember.Router.extend({
location: config.locationType
});
export default Router.map(function() {
this.resource('leader');
this.resource('profile');
this.route('loading');
});
Leader有一个模板和一个控制器,但它们现在基本上是空的。
import Ember from 'ember';
export default Ember.Route.extend({
model: function () {
return Ember.RSVP.hash({
players: this.get('store').find('player')
});
},
});
import DS from 'ember-data';
export default DS.Model.extend({
alias: DS.attr('string'),
createdAt: DS.attr('date'),
scans: DS.hasMany('scan'),
});
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
namespace: ''
});
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
primaryKey: function (type) {
return '_id';
},
serializeId: function(id) {
return id.toString();
}
});
我不确定这里的任何版本是否特别重要
ember-cli
0.2.3 ember-data
1.0.0-beta.16.1 ember
1.11.1 id
字段实际为_id
,则答案 0 :(得分:7)
好吧我发现错误是什么......我忘了检查服务器返回的数据是否遵守使用ember数据所需的约定/协议。服务器返回的JSON
看起来像这样。
[
{
"_id":"55405a5102b4ed623c225e87",
"alias":"mikeTest",
"__v":0,
"scans":[],
"createdAt":"2015-04-29T04:13:05.223Z"
}
]
它应该看起来像这样
{
"players": [
{
"_id":"55405a5102b4ed623c225e87",
"alias":"mikeTest",
"__v":0,
"scans":[],
"createdAt":"2015-04-29T04:13:05.223Z"
}
]
}
所以是的,这是我愚蠢而失踪的东西。
Ember数据期望从服务器返回的JSON符合JSON API Standard,这是一个标准,用于指定从服务器返回的JSON的格式。在这种情况下,数据不符合 JSON API 标准,因为我忘记将玩家数组放在名为players
的密钥下。 Ember v1.10.0 guide to models中还有更多这方面的例子。
Ember Data预计这是因为Ember Data可以对服务器返回的数据做出某些假设。