2016-05-26 9 views
1

のプロパティを読み取ることができない「タイプは」チケットの統計と呼ばれる: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 
     }); 
    } 
}); 
なぜこれが起こっているのと

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 

任意のアイデア:

そして、私はTypeError例外を取得しますか?このエラーは、アダプタのpathForType関数を削除すると消えますが、次にhttp://domain.com/data/ticket-statsからデータを取得する際の別のエラーが表示されます... ...は正しいURLではありません。私はcamelCase、ticket-stats => ticketStatsに変換する必要があります。

これは以下のように私のJSONが見えるものです:私は、単にJSONSerializerでJSONAPISerializerを置き換えることにより、アプリケーション・シリアライザを修正

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

:アプリ/シリアライザ/ 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がこの形式である必要があります私はあなたを導くためにしましょうnormalizeであなたの応答を正規化するには

あなたの助けを借りて次の文書を用意してください 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 

このエラーは、apiから受け取ったjsonデータがjson formateのアプリケーション要件に完全に適合していないために発生しています。

ここにjsonデータを共有してください。 domain.com json urlは動作していないためです。 コードには非常に多くの問題があります。それ以外の場合はあなたが必要

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

:あなたはここにこのシリアライザを使用する必要が1

+0

JSONAPISerializerの代わりにJSONSerializerを使用するように、アプリケーションのシリアライザを作成しました。 – roca323

+0

はこのシリアライザのコードを共有し、jsonデータも共有します。提供されたjsonのURLリンクが機能していないため、 –

+0

私のJSONと私のシリアライザの外観を表示するために投稿を編集しました。JSON APIへのリンクはイントラネットネットワーク上にあります。 – roca323

関連する問題