【问题标题】:Ember data mappingEmber 数据映射
【发布时间】:2013-02-26 13:41:25
【问题描述】:

我正在使用最新版本的 ember-data(修订版 11)和 REST 适配器从我的 API 中提取数据。返回的 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'

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案1】:

    乍一看,响应看起来很完美。

    我的猜测是您为错误的请求发送了错误的格式。

    这种格式适用于许多events,即findAllfindQuery (GET /events)

    但是,如果您为单个 find (GET /events/5118dd8c4c80866ef2000051) 返回此响应,则可能会收到此错误

    在这种情况下(当您只获取一个 event 时),您的响应应该如下所示:

    {
      "event": {
        "id": "5118dd8c4c80866ef2000051",
        "title": null,
        // ... rest of attributes
      }
    }
    

    【讨论】:

    • 格式正确。 “events”键下返回多个事件,“event”键下只返回一个事件。 Ember 和 ember-data 可以很好地用于单个事件。它只是在这条路线上有多个事件,它抛出了这个错误。
    • 返回上述响应的请求的 URL 是什么?
    • 它尚未公开,但 URL 看起来像:http://lj-web.dev/#/events/?location=goteborg-vastra-gotaland-county-sweden&origin=57.70412399999999%2C11.9788316。返回正确的 API 响应,但 ember-data 似乎不喜欢它......
    • 响应格式与请求非常相关,这就是我询问请求的原因...您使用App.Event.find({..})提出请求?
    • 我只是为此使用默认的 Ember 行为。我还没有为此编写任何特定的代码。我应该吗?
    【解决方案2】:

    经过大量调试和搜索,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'
    

    这远非完美,但目前可以使用。显然查询字符串支持计划在不久的将来发布。

    【讨论】:

    • 什么?您能否更正语法并进一步解释?这还有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多