我试图在没有路由器触发任何事件(如onStateChange
)的情况下静默更改当前 url 哈希,然后恢复路由器。我试过这个:
Ext.route.Router.suspend(false);
this.redirectTo('...');
Ext.route.Router.resume(true);
但是onStateChange
之后还是被解雇了resume()
。我也试过:
Ext.route.Router.suspend(false);
Ext.util.History.un('change', Ext.route.Router.onStateChange, Ext.route.Router);
Ext.util.History.suspendEvents(false);
this.redirectTo('...');
Ext.util.History.resumeEvents(true);
Ext.util.History.on('change', Ext.route.Router.onStateChange, Ext.route.Router);
Ext.route.Router.resume(true);
结果相同。似乎问题在于事件是在当前事件循环之外触发的,因此当您暂停事件时,它们仍在当前循环中触发。
我最终使用了这个似乎可以解决问题的黑客,但也许有一个更清洁的解决方案:
Ext.route.Router.suspend(false);
this.redirectTo('...');
Ext.Function.defer(function(){
Ext.route.Router.resume(true);
}, 1, this);