3

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

问题是 restful 后端的 show 动作,它没有配置为使用“name”作为查找器。

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

在我看来,这应该可以使用 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)
4

1 回答 1

2

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

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

于 2012-12-03T14:01:13.100 回答