2016-05-26 12 views
1

lesen Ich habe ein Modell in meinem ember App namens Ticket-Statistiken erstellt:Emberjs: nicht Eigenschaft 'Typ' undefinierter

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() 

}); 

Die Daten von JSON api gezogen wird: http://domain.com/data/ticketStats?blah=blah ... Also ich habe einen speziellen Adapter für dieses Modell Ticket-Statistik genannt hinzugefügt:

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); 
    } 
}); 

ich die Daten für dieses Modell in Route erhalten:

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 
     }); 
    } 
}); 

Und, erhalte ich eine 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 

Irgendwelche Ideen, warum dies geschieht? Dieser Fehler verschwindet, wenn ich die pathForType-Funktion im Adapter entferne, aber dann bekomme ich einen weiteren Fehler beim Abrufen der Daten von http://domain.com/data/ticket-stats? ... was nicht die richtige URL ist. Ich muss zu camelCase konvertieren, ticket-stats => ticketStats. Diese

ist, was meine Json wie folgt aussieht: app/Serializer/application.js

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

export default JSONSerializer.extend({ 
}); 

Jede Hilfe wäre:

{ 
    "get_avg_tickets": { ... }, 
    "get_tickets_more": { ... }, 
    "get_tickets": { ... } 
} 

ich durch einfaches Austauschen JSONAPISerializer mit JSONSerializer auch die Anwendung Serializer modifizierte geschätzt! Ich bin sehr neu in Ember.

+0

So sieht mein JSON aus: {"get_avg_tickets": {..}, "get_tickets_more": {...}, "get_tickets": {...}} – roca323

+0

Sie müssen den Serializer bei der Verwendung 'implementieren DS.EmbeddedRecordsMixin'. –

Antwort

4

Sie brauchen diese Serializer hier zu verwenden, ist die Referenz Link 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); 
    }, 
}); 

Ihre json sollte in diesem Format sein:

{ 
    "get_avg_tickets": 45, 
    "get_tickets_more": propertyvalue, 
    "get_tickets": propertyvalue 
} 

sonst Sie brauchen Normalisieren Sie Ihre Antwort in normalizeQueryReaktion des Serialisierers

Auch bereit nach doc für Ihre Hilfe http://thejsguy.com/2015/12/05/which-ember-data-serializer-should-i-use.html ich hoffe, es wird dir helfen. vergiss nicht, meine Antwort zu akzeptieren.

+0

Antwort aktualisiert. –

0

Sie müssen Serialisierer verwenden, die am besten für Ihre JSON-Daten geeignet sind.

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

Dieser Fehler erhöht sich, weil Ihre von api empfangenen JSON-Daten nicht vollständig in Ihre Anwendungsanforderungen für JSON-Format passen.

Bitte teilen Sie Json Daten hier. weil domain.com json url nicht funktioniert. Es gibt so viele Probleme in Ihrem Code. lassen Sie mich Ihnen zu führen, eins nach dem anderen

+0

Ich habe einen Serializer für die Anwendung erstellt, so dass ein JSONSerializer anstelle von JSONAPISerializer verwendet wird. – roca323

+0

teilen Sie den Code dieses Serialisierer und teilen Sie auch Json Daten. weil der angegebene json url link nicht funktioniert –

+0

Ich habe den Post bearbeitet, um zu zeigen, wie mein JSON aussieht und mein Serializer.Die Verbindung zur JSON-API soll nicht für Sie funktionieren, sondern in einem Intranet-Netzwerk. – roca323

Verwandte Themen