我正在制作一个可重用(有点多态)的评论小部件。我想要一个按钮,使我能够返回到父路由(例如,如果我位于 /blog_posts/1/comments,我希望该按钮将我带回 /blog_posts/1)。
我目前正在使用transitionToRoute('blog_post')
,但这从长远来看是行不通的,因为我希望此代码通常可以与任何模型一起运行(即它不知道有关路线名称的任何信息,因此我无法调用“blog_post”)。我想我正在寻找类似 Rails 的东西url_for
,或者一种说法router.get('parent_route')
(or controller.get('parent_route')
).
有什么指示或想法吗?谢谢。
这个问题在 2013 年的 ember v0.9.8 或其他版本中得到了回答,从那时起该框架已经取得了长足的进步。我认为当前版本的框架可能有更好的解决方案。因为,我与 Ember 没有联系,所以无法真正更新这个答案!
受源代码中私有函数的启发,将以下方法添加到返回路由名称的路由中parentRoute
Ember.Route.reopen({
getParentRoute: function(){
var route = this;
var handlerInfos = route.router.router.currentHandlerInfos;
var parent, current;
for (var i=0, l=handlerInfos.length; i<l; i++) {
current = handlerInfos[i].handler;
if((current.routeName == route.routeName)||(current.routeName.match(/./) && current.routeName.split('.')[1] == route.routeName )){
return parent.routeName;
}
parent = current;
}
}
})
使用内部路由如下
App.SomeRoute = Ember.Route.extend({
events: {
goBack: function(){
this.transitionTo(this.getParentRoute());
}
}
})
车把
<script type="text/x-handlebars" data-template-name="some">
<a href="#" {{action goBack}}>Back</a>
</script>
实际代码请打开this https://raw.github.com/emberjs/ember.js/release-builds/ember-1.0.0-rc.2.js并执行 CTRL+F function parentRoute
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)