ember.js - 从重写动作调用基本动作

时间:2014-01-23 15:30:19

标签: ember.js

我想通过覆盖操作调用基本操作,例如jsbin

我知道如果我返回true,那么它将传播到动作,问题是我希望动作执行然后在重写动作中执行某些操作。这可能吗?

1 个答案:

答案 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并让动作气泡不起作用,因为路径中的动作将被调用。 需要注意的重要一点是控制器可以向自己发送动作。如果它们不由控制器本身处理,则该动作将冒泡到其路线和任何后续父路线

我希望这可以帮到你!