2017-10-11 41 views
0

只是关于ExtJS中标签栏的一个简短问题。我已经构建了一个窗口,其中包含许多控件,并且在选项卡栏的6个选项卡中的每个选项卡中都有一组控件。每个选项卡中的控件几乎相同,我不处理选项卡更改事件。然而,当我选择一个选项卡时,焦点会返回到对话框的顶部(这样做会以一种公平的方式滚动),然后用户必须手动向下滚动到选项卡以查看现在可见的控件。从标签栏中选择标签时,ExtJS窗口跳转到顶部

更改选项卡是否会产生Windows refesh?如果是这样,有什么办法可以阻止这种情况发生?

我需要承认,这种情况仅限于我的两台电脑中的一台。我已经在Azure中安装完成的应用程序,并且在IE或Chrome中从machine1运行它时,它可以正常工作。但是,如果我使用与IE和Chrome相同版本的machine2,则会发生跳跃和一些奇怪的事件。是否有一些机器相关的值可能导致跳转?

谢谢

回答

0

只是为了让你知道我发现了什么与一些进一步的挖掘身边发生的事情。我的两台PC之间的区别在于笔记本电脑具有触摸屏。这导致ExtJS添加特殊的滚动类来处理用户用他的手指滚动对话框的主体。

这是我创造的几个问题。首先,跳转到顶部是由切换活动选项卡后重置滚动器引起的。重置功能解除了一切,包括将滚动设置回顶端。有趣的是,通过切换标签页导致96个scoller被重置。我不知道为什么会出现这种情况,并且怀疑它会导致整个对话框刷新,而不仅仅是标签,我不明白为什么需要刷新。我正在寻找一种方法来阻止这种情况的发生。

我提到了上面的一些其他问题。一个是第二个标签显示为空,但带有滚动条。我们可以使用这些来查看适当的标签内容。我发现这是一个Ext JS错误。错误的是,当Ext JS激活下一个选项卡时,它将选项卡放在滚动类的外部(由x-scroll-scroller标记),而不是在其内部。这导致它感到困惑。为了解决这个问题,我在Ext.layout.container.Container类的getRenderTarget函数中添加了一些代码。以前,这简直是

getRenderTarget: function() { 
    return this.owner.getTargetEl(); 
} 

我添加了一个特定的测试,看看如果第一个孩子是一个滚动条,而既然如此,返回滚动条来代替。

getRenderTarget: function() { 
    var me = this.owner; 
    if (me.body && me.body.dom.firstChild.className == 'x-scroll-scroller') 
     return me.body.dom.firstChild; 
    return me.getTargetEl(); 
} 

选项卡控件的血统现在保持正确,我简要提及的其他奇怪的工件消失了。

因此目前的状态。我正在寻找停止refesh的方法,并会在我找到它时进行更新,但触摸屏支持绝对是flaky。

仅供参考。我正在使用Ext JS 6.1。