我有以下设置:
具有动作doNext的ListRoute。 ItemRoute(Detail)也有一个事件doNext。
App.Router.map(function () {
this.resource('list', function() {
this.route('item');
})
});
App.ListRoute = Ember.Route.extend({
actions:{
doNext:function() {
alert("doNext from List Route!");
}
}
})
App.ListItemRoute = Ember.Route.extend({
actions:{
doNext:function() {
alert("doNext from List Item Route");
}
}
})
单击List中的{{action doNext}}时,它会在List Route中触发正确的操作。 但是当我点击相同的链接时,在我转换了项目之后,列表项路由的操作被触发。我原以为,该动作仍会被发送到ListRoute。
这是设计的吗?有没有办法强迫我的预期行为?
我创造了一个小提琴,你可以看到这个: http://jsfiddle.net/AyKarsi/HA93a/4/
答案 0 :(得分:1)
这是行动发生的方式,你从哪个模板点击动作无关紧要,只是你在哪条路上,它从最顶层开始,然后如果找不到它,它就会上升到链。这允许您从应用程序中的随机位置发送相同的操作,并让它们向上传播,或被最高/最深的可用路径覆盖。
你的jsfiddle的模板名称是错误的,它应该是resource/route
如果您不希望相同的操作名称出现该问题,那么最好的方法是在您的操作中使用不同的名称。老实说,在我看来这有点奇怪,也许有人应该抱怨,但这是设计的。