3

属性「名前」を使用してユーザー レコードを検索する ember ルートを構築したいと考えています。

問題は、restful バックエンドの show アクションです。ファインダーとして「name」を使用するように構成されていません。

したがって、「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)

アイデアはありますか?

ダンの提案を使用したソリューション

 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は非同期メソッドであるため、非同期ルーティングを実装する必要があるようです。トピックに関するルークメリアのスライドデッキをチェックしてください(特にスライド11):

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

于 2012-12-03T14:01:13.100 に答える