微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不触发 ExtJS7 中的任何事件的情况下暂停和恢复路由器?

如何解决如何在不触发 ExtJS7 中的任何事件的情况下暂停和恢复路由器?

我正在尝试在路由器不触发任何事件(如 Ext.route.Router.suspend(false); this.redirectTo('...'); Ext.route.Router.resume(true); )的情况下静更改当前的 url 哈希,然后恢复路由器。我试过这个:

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); Ext.route.Router.resume(true); 之后仍然被触发。我也试过:

Ext.route.Router.suspend(false);
this.redirectTo('...');
Ext.Function.defer(function(){
    Ext.route.Router.resume(true);
},1,this);

结果相同。问题似乎是事件是在当前事件循环之外触发的,所以当你挂起事件时,它们仍然在当前循环中触发。

我最终使用了这个似乎可以解决问题的 hack,但也许有一个更简洁的解决方案:

> A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
   > Entry name 'classes.dex' collided``` 

解决方法

扩展您对解决方案的想法,我认为您需要添加的只是一个 clearLastTokens 调用。这是一个测试 Fiddle,以及我将应用的覆盖。

Ext.define('RouteOverride',{
    override: 'Ext.route.Mixin',redirectToSilent: function (hash,opt) {
        const Router = Ext.route.Router;
        const currentRoute = Ext.util.History.getToken();
        Router.suspend(false);
        this.redirectTo(hash,opt);
        Ext.asap(function () {
            Router.clearLastTokens(currentRoute);
            Router.resume(true);
        });
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。