我在我的ember应用程序中创建了一个名为ticket-stats的模型:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
export default Model.extend({
get_tickets_more: attr(),
get_tickets: attr(),
get_avg_tickets: attr()
});
数据来自JSON api:http://domain.com/data/ticketStats?blah=blah ... 所以我为这个模型添加了一个名为ticket-stats的特殊适配器:
import JSONAPIAdapter from 'ember-data/adapters/json-api';
export default JSONAPIAdapter.extend({
host: 'http://domain.com',
namespace: 'data',
pathForType: function(type) {
return Ember.String.camelize(type);
}
});
我在路线中获取此模型的数据:
import Ember from 'ember';
export default Ember.Route.extend({
model () {
var ticketData;
this.store.query('ticket-stats', { teamID: 218, attUID: 'oc7569', useProd: 1})
.then(function(stats) { ticketData = stats; });
return Ember.RSVP.hash({
currentUser: this.currentUser,
ticketStats: ticketData
});
}
});
而且,我得到一个TypeError:
ember.debug.js:32096 TypeError: Cannot read property 'type' of undefined
at _pushInternalModel (store.js:1524)
at push (store.js:1501)
at finders.js:171
at Object.Backburner.run (ember.debug.js:678)
at _adapterRun (store.js:1733)
at finders.js:168
at tryCatch (ember.debug.js:53806)
at invokeCallback (ember.debug.js:53821)
at publish (ember.debug.js:53789)
at ember.debug.js:32054onerrorDefault @ ember.debug.js:32096exports.default.trigger @ ember.debug.js:54476(anonymous function) @ ember.debug.js:55727Queue.invoke @ ember.debug.js:333Queue.flush @ ember.debug.js:397DeferredActionQueues.flush @ ember.debug.js:205Backburner.end @ ember.debug.js:560(anonymous function) @ ember.debug.js:1126
有关为何发生这种情况的任何想法?当我删除适配器中的pathForType函数时,此错误消失,但后来我收到有关从http://domain.com/data/ticket-stats获取数据的另一个错误?...这不是正确的URL。我必须转换为camelCase,ticket-stats => ticketStats。
这就是我的json的样子:
{
"get_avg_tickets": { ... },
"get_tickets_more": { ... },
"get_tickets": { ... }
}
我还通过简单地用JSONSerializer替换JSONAPISerializer来修改应用程序序列化程序:app / serializers / application.js
import JSONSerializer from 'ember-data/serializers/json';
export default JSONSerializer.extend({
});
任何帮助将不胜感激!我对Ember很新。
答案 0 :(得分:5)
你需要在这里使用这个序列化器是参考链接 http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html
import DS from 'ember-data';
export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
normalizeQueryResponse(store, primaryModelClass, payload, id, requestType) {
payload = { ticketStats: payload };
return this.normalizeArrayResponse(store, primaryModelClass, payload, id, requestType);
},
});
你的json应采用以下格式:
{
"get_avg_tickets": 45,
"get_tickets_more": propertyvalue,
"get_tickets": propertyvalue
}
否则您需要在serilializer的normalizeQueryreponse中规范化您的响应
也准备好关注doc以获得帮助 http://thejsguy.com/2015/12/05/which-ember-data-serializer-should-i-use.html 我希望它会对你有所帮助。别忘了接受我的回答。
答案 1 :(得分:0)
您需要使用最适合您的json数据的序列化程序。
http://emberjs.com/api/data/classes/DS.JSONAPISerializer.html
此错误正在引发,因为从api收到的json数据并不完全符合json formate的应用程序要求。
请在此处分享json数据。因为domain.com json url不起作用。 您的代码中存在很多问题。让我一个一个地指导你