【问题标题】:ember.js instantiate first record from ember-data query in routerember.js 从路由器中的 ember-data 查询实例化第一条记录
【发布时间】:2012-12-04 07:16:17
【问题描述】:

我想构建一个使用属性“名称”来查找用户记录的 ember 路由。

问题是restful后端的show action,它没有配置为使用“name”作为finder。

所以我想使用“名称”查询后端索引操作并实例化集合中返回的第一条记录。

在我看来,这应该可以使用 ember-data。

这是灰烬路线:

edit: Em.Route.extend
  route: '/:name/edit'

  deserialize: (router, params) ->
    user = router.get('store').findQuery( App.User, { name: params.name } )
    #return user[0]
    #return user.get('content')[0]
    return user

  serialize: (router, user) ->
    name: user.get('name')

  connectOutlets: (router, user) ->
    router.get('applicationController').connectOutlet('user', user)

有人有什么想法吗?

使用 DAN 建议的解决方案

 loading: Em.State.extend()

 edit: Em.Route.extend
  route: '/:name/edit'

  deserialize: (router, params) ->
    user = router.get('store').findQuery( App.User, { name: params.name } )
    deferred = $.Deferred()
    user.addObserver "isLoaded", -> deferred.resolve( user.materializedObjectAt(0) )
    return deferred.promise()

  serialize: (router, user) ->
    name: user.get('name')

  connectOutlets: (router, user) ->
    router.get('applicationController').connectOutlet('user', user)

【问题讨论】:

    标签: ruby-on-rails ember.js ember-data


    【解决方案1】:

    听起来你需要实现异步路由,因为findQuery 是一个异步方法。查看 Luke Melia 关于该主题的幻灯片(尤其是幻灯片 11):

    http://www.lukemelia.com/blog/archives/2012/09/18/async-routing-in-ember-js/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多