5

我有一个 Ember 应用程序,我正在使用一个动作来应用 CSS 动画。动画完成后,我想将动作从控制器冒泡到我的路由以处理更多功能。

我知道,如果我return: true;这样做,动作就会冒泡,如此所述。

这是我的控制器的样子:

App.MyController = Ember.ObjectController.extend({
    actions: {
        myAction: function() {
            $('.my-element').addClass('my-animation-class').one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(e) {
                console.log('working');
                return true;
            }
        }
    }
});

如果我在回调中将某些内容记录到我的控制台,我animationend可以看到它正在工作,如果我移出return: true;回调,则操作会成功冒泡。但是,在回调内部返回 true 不起作用。

我错过了什么?

4

1 回答 1

8

您可以通过调用手动触发气泡self.target.send('myAction');

IndexController这样定义

App.IndexController = Ember.Controller.extend({
  actions: {
    bubbleMe: function(item){
      var self = this;
      alert('IndexController says you clicked on: ' + item);
      setTimeout(function(){
        self.target.send('bubbleMe',[item]);
      }, 1000);
    }
  }
});

会冒泡到这样的ApplicationRoute定义

App.ApplicationRoute = Ember.Route.extend({
  actions: {
    bubbleMe: function(item){
      alert('ApplicationRoute says you clicked on: ' + item);
    }
  }
});

你可以在这里看到一个工作小提琴:http: //jsfiddle.net/tikotzky/2ce9s32f/

于 2014-08-08T02:06:09.270 回答