Ember.js动作冒泡并跳过一条路线

时间:2015-08-30 17:01:03

标签: javascript ember.js

设置

想象一下这个结构的Ember.js应用程序(试过v1.13.9):

  1. ApplicationRoute
  2. IndexRoute
  3. 的IndexController
  4. 在索引模板上,只有一个带有操作的按钮:

    <!-- index/template.js -->
    <button {{action 'ping' 'index template'}}>index</button>
    

    所有路由/控制器都会处理此操作,打印出一条消息并将操作传递到ApplicationRoute。例如,对于IndexRoute,它是:

    // excerpt from index/route.js
    actions: {
      ping(from) {
        console.log('IndexRoute^ping from', from);
        return true;
      }
    }
    

    同样的行动也可以来自IndexController

    // excerpt from index/controller.js
    thingsHappen() {
      this.send('ping', 'index controller');
    }
    

    您可以在以下网址查看代码并进行播放:

    问题

    当您按下按钮时,消息显示所有三个路线/控制器按顺序从内部冒泡看到该动作。但是,当从IndexController发送操作时,它会跳过IndexRoute。这是为什么?

1 个答案:

答案 0 :(得分:3)

这与路线尚未真正过渡到这一事实有关。因此index路由不是当前链的一部分。如果您想确保已加载index路由,您可以联系转换承诺并等待它完成,然后再致电您的行动。

 setupController(controller, model, transition) {
    controller.wake('non attached');
    transition.then(function(){
      controller.wake('attached');
    });
  },

http://ember-twiddle.com/e36c0228967fb4485d27