0

APIからデータをプルするために最新バージョンのember-data(rev。11)とRESTアダプターを使用しています。返されるJSONのサンプルは次のようになります。

{ 
    "events": [
        {
            "id": "5118dd8c4c80866ef2000051",
            "title": null,
            "starts_at": 1361901600,
            "ends_at": null,
            "currency": "SEK",
            "cents_door": 4000,
            "cents_advance": null,
            "price_door": "40.00 kr",
            "price_advance": null,
            "age_limit": null,
            "venue_section": "PLAYHOUSE",
            "description": null,
            "url": null,
            "repeats": null,
            "repeats_until": null,
            "venue_id": "nefertiti-jazz-club",
            "act_ids": [ "marias-playhouse" ]
        }
    ]
}

モデルは次のようになります。

App.Event = DS.Model.extend
  title: DS.attr('string')
  startsAt: DS.attr('number')
  endsAt: DS.attr('number')
  currency: DS.attr('string')
  centsDoor: DS.attr('number')
  centsAdvance: DS.attr('number')
  priceDoor: DS.attr('string')
  priceAdvance: DS.attr('string')
  ageLimit: DS.attr('string')
  venueSection: DS.attr('string')
  description: DS.attr('string')
  url: DS.attr('string')
  repeats: DS.attr('string')
  repeatsUntil: DS.attr('string')
  venue: DS.belongsTo('App.Venue')
  acts: DS.hasMany('App.Act')

しかし、データを要求すると、要求は正常に完了しますが、コンソールに次のエラーが表示されます。

キャッチされないエラー:アサーションに失敗しました:サーバーがキーイベントを含むハッシュを返しましたが、マッピングがありません

ここで何が問題になっているのか考えてみてください。

===

更新:要求に応じて、Ember.jsアプリをもう少し追加します。

私のRESTAdapterセットアップ:

DS.RESTAdapter.registerTransform 'raw',
  deserialize: (serialized) ->
    serialized
  serialize: (deserialized) ->
    deserialized

App.Store = DS.Store.extend
  adapter: DS.RESTAdapter.create
    url: LJ.CONFIG.api.url
  revision: 11

そしてルート:

App.Router.map ->
  this.resource 'events', ->
    this.route 'new'
  this.resource 'event', path: '/events/:event_id', ->
    this.route 'edit'
  this.resource 'venue', path: '/venues/:venue_id', ->
    this.route 'edit'
    this.resource 'events'
  this.resource 'act', path: '/acts/:act_id', ->
    this.route 'edit'
    this.resource 'events'
  this.route 'search', path: '/search/:term'
  this.route 'doc', path: '/docs/:doc'
4

2 に答える 2

1

多くのデバッグと検索を行った後、Ember.jsはまだクエリ文字列パラメーターをサポートしていないようです。代わりに、次のようにルートをハックする必要がありました。

App.Router.map ->
  this.resource 'events', path: '/events/:country/:region/:city'
  this.route 'eventsNew', path: '/events/new'
  this.resource 'event', path: '/events/:event_id', ->
    this.route 'edit'
  this.resource 'venue', path: '/venues/:venue_id', ->
    this.route 'edit'
    this.resource 'events'
  this.resource 'act', path: '/acts/:act_id', ->
    this.route 'edit'
    this.resource 'events'
  this.route 'search', path: '/search/:term'
  this.route 'doc', path: '/docs/:doc'

これは完璧にはほど遠いですが、今のところは機能します。どうやらクエリ文字列のサポートは近い将来のリリースで予定されています。

于 2013-02-27T15:53:24.847 に答える
1

レスポンスは一見完璧に見えます。

私の推測では、間違ったリクエストに対して間違ったフォーマットを送信していると思われます。

この形式は、 aまたは( )eventsを意味するmany に対して有効です。findAllfindQueryGET /events

findただし、単一の( GET /events/5118dd8c4c80866ef2000051)に対してこの応答を返す場合、このエラーが発生する可能性があります。

その場合 (1 つのみを取得する場合event)、応答は次のようになります。

{
  "event": {
    "id": "5118dd8c4c80866ef2000051",
    "title": null,
    // ... rest of attributes
  }
}
于 2013-02-26T18:49:25.140 に答える