Ember.js:行动传播

时间:2013-12-03 15:42:31

标签: ember.js

我有以下设置:

具有动作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/

1 个答案:

答案 0 :(得分:1)

这是行动发生的方式,你从哪个模板点击动作无关紧要,只是你在哪条路上,它从最顶层开始,然后如果找不到它,它就会上升到链。这允许您从应用程序中的随机位置发送相同的操作,并让它们向上传播,或被最高/最深的可用路径覆盖。

你的jsfiddle的模板名称是错误的,它应该是resource/route

http://jsfiddle.net/HA93a/6/

如果您不希望相同的操作名称出现该问题,那么最好的方法是在您的操作中使用不同的名称。老实说,在我看来这有点奇怪,也许有人应该抱怨,但这是设计的。