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()

我对这种方法不满意,因为 1)它使用了未记录的findStateByPath方法,以及 2)因为它需要 stateMeta 对象的内部知识。有一个更好的方法吗?如果没有,应该有吗?

4

1 回答 1

4

在视图中显示信息的正确方法是使其在控制器上可用,并将视图绑定到该控制器。

在这种情况下,惯用的做法是在 上设置一个query属性helpController

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