1

ember ルーターを使用して、ember アプリに検索フィールドを実装しました。私のルーターの関連部分は次のようになります。

question: Em.Route.extend({
  route: '/?query=:query'
  connectOutlets: function(router, context) {
    query = context['query'],
    articles = App.get('defaultStore').findQuery(App.Article, {"query": query})
    router.get('helpController').connectOutlet('articlesSearch', 'articlesSearch', articles)
  }
})

検索フィールドの値を現在のルートのコンテキストにバインドしたいと考えています。stateMetaFor次のようにコントローラーに実装されているメソッドを使用して、コントローラーでこれを行う方法を見つけました。

query: function() {
  router = App.get('router')
  state = router.findStateByPath(router.get('currentState'), 'help.question')

  if (router.get('currentState') == state) {
    stateMeta = router.stateMetaFor(state)
    return stateMeta['context']['query]
  }

  return ''
}.property('App.router.currentState').cacheable()

findStateByPath1) 文書化されていないメソッドを使用し、2) stateMeta オブジェクトの内部に関する知識が必要なため、私はこのメソッドに満足していません。これを行うより良い方法はありますか?ないならあるべき?

4

1 に答える 1

4

ビューに情報を表示する正しい方法は、コントローラーで使用できるようにし、ビューをそれにバインドすることです。

この場合、慣用的に行うことは、 にqueryプロパティを設定することhelpControllerです。

router.set('helpController.query', query);
于 2012-08-28T14:39:31.450 に答える