编程语言
首页 > 编程语言> > javascript-Ember.js操作冒泡并跳过一条路线

javascript-Ember.js操作冒泡并跳过一条路线

作者:互联网

设定

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

> ApplicationRoute
> IndexRoute
> IndexController

在索引模板上,只有一个带有动作的按钮:

<!-- 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');
}

您可以在以下URL上查看代码并使用它:

>参见Github要点:https://gist.github.com/pablobm/8fa2b8ae36e875cb9944
>和旋转玩:http://ember-twiddle.com/8fa2b8ae36e875cb9944

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

解决方法:

这与路线尚未真正过渡到这一事实有关.因此,索引路由不是当前链的一部分.如果要确保索引路由已加载,可以挂接到过渡承诺,并等待其完成后再调用操作.

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

http://ember-twiddle.com/e36c0228967fb4485d27

标签:ember-js,javascript
来源: https://codeday.me/bug/20191119/2038947.html