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