2016-05-26 4 views
1

Я создал модель в моем Ember приложение называется билет статистика:Emberjs: не может прочитать свойство «тип» неопределенной

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 ... Так я есть добавлен специальный адаптер для этой модели называется билет статистика:

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": { ... } 
} 

Я также изменил сериалайзер приложения, просто заменив JSONAPISerializer с JSONSerializer: приложение/сериализаторов/application.js

import JSONSerializer from 'ember-data/serializers/json'; 

export default JSONSerializer.extend({ 
}); 

Любая помощь будет оценили! Я очень новичок в Ember.

+0

Это то, что выглядит мой json: {"get_avg_tickets": {..}, "get_tickets_more": {...}, "get_tickets": {...}} – roca323

+0

Вы должны реализовать сериализатор при использовании ' DS.EmbeddedRecordsMixin'. –

ответ

4

вы должны использовать эту сериалайзер здесь ссылку ссылку 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 
} 

иначе вам нужно чтобы нормализовать ваш ответ в normalizeQueryreponse serilializer

Также готовый следующий документ для вашей помощи http://thejsguy.com/2015/12/05/which-ember-data-serializer-should-i-use.html Надеюсь, это вам поможет. Не забудьте принять мой ответ.

+0

ответ обновлен. –

0

вам необходимо использовать сериализаторы, которые лучше всего подходят для ваших данных json.

http://emberjs.com/api/data/classes/DS.JSONAPISerializer.html 

Эта ошибка поднимается, потому что данные json, полученные от api, не полностью соответствуют вашим требованиям к приложениям для json formate.

Пожалуйста, поделитесь данными json здесь. потому что domain.com json url не работает. в коде есть так много проблем. позвольте мне направлять вас один на один

+0

Я создал сериализатор для приложения, так что он использует JSONSerializer вместо JSONAPISerializer. – roca323

+0

делить код этого сериализатора, а также делиться данными json. потому что ваша предоставленная ссылка json url не работает –

+0

Я отредактировал сообщение, чтобы показать, как выглядит мой JSON, а также мой сериализатор.Ссылка на JSON api не должна работать для вас, она находится в сети интрасети. – roca323

Смежные вопросы