我使用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对象的内部。有一个更好的方法吗?如果没有,应该有吗?
答案 0 :(得分:4)
在视图中显示信息的正确方法是使其在控制器上可用,并将您的视图绑定到该视图。
在这种情况下,惯用的事情是在query
上设置helpController
属性:
router.set('helpController.query', query);