我想通过覆盖操作调用基本操作,例如jsbin。
我知道如果我返回true,那么它将传播到动作,问题是我希望动作执行然后在重写动作中执行某些操作。这可能吗?
答案 0 :(得分:-1)
正如@fanta所说,你并不完全覆盖行动,因为你必须从你的父路线延伸,但除此之外:
如果从操作处理程序返回true
,操作将冒泡到任何父路由。很简单,您可以指定调用父级的路由操作处理程序,或者只是让操作在您的处理程序中死掉
App.IndexRoute = Ember.Route.extend({
actions:{
doSomething: function(){
//do things
if (something) {
//I got this, no need for my parent
return true;
} else if (otherThing) {
//I can't do this, let my parent route handle it
return false;
}
return defaultOption;
}
}
});
我想不出一个使用动作冒泡的场景,你无法(隐式)调用你父的路由动作处理程序。你呢?
修改强>
如果您要在要删除的对象的remove
方法中等待承诺,可以使用以下内容:
App.IndexRoute = Ember.Route.extend({
actions:{
removeConfirmed: function(){
// do some handling
console.log("I may transitionTo");
self.transitionToRoute('otherRoute', 'someParam');
}
}
});
App.IndexController = Ember.Controller.extend({
actions:{
remove: function(){
var self = this;
this.get('content').remove().then(function() {
// you could transition from the controller
self.transitionToRoute('otherRoute', 'someParam');
// or if you need some handling in the route
self.send('removeConfirmed');
});
// you could let the action remove action bubble up
return true;
}
}
});
如果没有必要等待承诺,那么我不明白为什么返回true并让动作气泡不起作用,因为路径中的动作将被调用。 需要注意的重要一点是控制器可以向自己发送动作。如果它们不由控制器本身处理,则该动作将冒泡到其路线和任何后续父路线
我希望这可以帮到你!