ExtJS 4.2:工具提示宽度不够,无法查看内容

sqyvllje  于 2022-11-05  发布在  其他
关注(0)|答案(9)|浏览(163)

我注意到自从升级到ExtJS 4.2后,当文本字段中有错误时,显示的工具提示不够宽,无法看到工具提示的内容--它们似乎总是40 px宽。
下面是一个测试用例,它显示了这个问题:

<html>
<head>
    <title>Field error tooltips</title>
    <link rel="stylesheet" type="text/css" href="ext-4.2.0/resources/css/ext-all.css">
    <script type="text/javascript" src="ext-4.2.0/ext-all-debug.js"></script>
</head>
<body>
    <script type="text/javascript">
    Ext.onReady(function(){

        var form = Ext.create("Ext.form.Panel",{
            title: 'My form',
            width: 300,
            height: 100,
            items: [
                {xtype: 'textfield', name: 'FIELD1', fieldLabel: 'Field 1', allowBlank: false}
            ],
            renderTo: Ext.getBody()
        });
    });
    </script>
</body>
</html>

在上面的例子中,如果您单击字段,然后在没有输入任何内容的情况下单击它,它会显示一个工具提示,说明它不允许为空。不幸的是,工具提示的宽度不够宽,无法看到消息。其他人是否遇到过这种情况?
谢谢你!

mpbci0fu

mpbci0fu1#

谢谢你们的帮助,但我在 Sencha 论坛上找到了一个解决方案,似乎很有效:
http://www.sencha.com/forum/showthread.php?260106-Tooltips-on-forms-and-grid-are-not-resizing-to-the-size-of-the-text/page3#24
特别是应用程序开头的以下代码:

delete Ext.tip.Tip.prototype.minWidth;
pxyaymoc

pxyaymoc2#

这是extjs4.2一个错误,它可以在firefox 19上运行,但不能在chrome 26上运行。
您应该覆盖工具提示的css类:

.x-tip {
    width: auto !important;
}
.x-tip-body {
    width: auto !important;
}
.x-tip-body span {
    width: auto !important;
}
mftmpeh8

mftmpeh83#

很抱歉,我帮不上什么忙,这是4.2.0的一个已知问题,可能会在下一个版本中修复。请参阅:http://www.sencha.com/forum/showthread.php?257201
作为一种临时的解决方法,如果不需要动态调整提示容器的大小,则可以直接覆盖CSS

.x-tip-form-invalid, .x-tip-body-form-invalid {
    width: 150px !important;
}
8dtrkrch

8dtrkrch4#

现在还在好奇地看这个...
我试着比较了4.1和4.2的源代码。我认为问题出在汽车容器的布局上。在4.1和4.2之间有很多东西改变了。所以我们可以看看这个。
希望对某些人有用。

if(Ext.isIE10) { 
      Ext.supports.Direct2DBug = true;
  }

  if(Ext.isChrome) {
      Ext.define('Ext.layout.container.AutoTip', {
        alias: ['layout.autotip'],
        extend: 'Ext.layout.container.Container',

        childEls: [
            'clearEl'
        ],

        renderTpl: [
            '{%this.renderBody(out,values)%}',

            '<div id="{ownerId}-clearEl" class="', Ext.baseCSSPrefix, 'clear" role="presentation"></div>'
        ],

        calculate: function(ownerContext) {
            var me = this,
                containerSize;

            if (!ownerContext.hasDomProp('containerChildrenDone')) {
                me.done = false;
            } else {

                containerSize = me.getContainerSize(ownerContext);
                if (!containerSize.gotAll) {
                    me.done = false;
                }

                me.calculateContentSize(ownerContext);
            }
        }
    });

    Ext.override(Ext.tip.Tip, {
        layout: {
            type: 'autotip'
        }
    });
}

Ext.QuickTips.init();

您可以在此论坛主题上查看更多详细信息。

oprakyz7

oprakyz75#

删除Ext.tip.Tip.prototype.minWidth并不能在所有情况下(在IE10上)解决这个问题,而添加

if(Ext.isIE10) { 
      Ext.supports.Direct2DBug = true;
}

修复了工具提示,但引起了其他奇怪的问题(工具栏按钮的边距有时会受到影响!)。我看到的最好的解决方案是:

Ext.override(Ext.tip.QuickTip, {
        helperElId: 'ext-quicktips-tip-helper',
        initComponent: function ()
        {
            var me = this;

            me.target = me.target || Ext.getDoc();
            me.targets = me.targets || {};
            me.callParent();

            // new stuff
            me.on('move', function ()
            {
                var offset = me.hasCls('x-tip-form-invalid') ? 35 : 12,
                    helperEl = Ext.fly(me.helperElId) || Ext.fly(
                        Ext.DomHelper.createDom({
                            tag: 'div',
                            id: me.helperElId,
                            style: {
                                position: 'absolute',
                                left: '-1000px',
                                top: '-1000px',
                                'font-size': '12px',
                                'font-family': 'tahoma, arial, verdana, sans-serif'
                            }
                        }, Ext.getBody())
                    );

                if (me.html && (me.html !== helperEl.getHTML() || me.getWidth() !== (helperEl.dom.clientWidth + offset)))
                {
                    helperEl.update(me.html);
                    me.setWidth(Ext.Number.constrain(helperEl.dom.clientWidth + offset, me.minWidth, me.maxWidth));
                }
            }, this);
        }
    });

这似乎工作在IE9和10,Chrome和Firefox.

pod7payv

pod7payv6#

另一个不错的解决方案是添加以下CSS:

.x-border-box .x-tip, .x-border-box .x-tip * {
  box-sizing: content-box;
}

但是工具提示有点太大了。
我将尝试user826840的解决方案,并覆盖Ext.tip.QuickTip。

tjvv9vkg

tjvv9vkg7#

另一个解决方案是覆盖QuickTip的最小宽度,因为字段布局创建了新的QuickTip,它不依赖于QuickTip单例(与文档相反)。

Ext.override(Ext.tip.QuickTip,{
    minWidth: 200
});
bhmjp9jg

bhmjp9jg8#

使用<br/>标签来显示多行工具提示,有时可用于解决长度问题。

const msg = 'bla bla...<br/>bla bla...'; // Here <br/> tag in html message.

Ext.create('Ext.tip.ToolTip', {
    target: component.id,
    html: msg
});
bmp9r5qi

bmp9r5qi9#

如果您在IE浏览器中遇到工具提示EXTJS 4.2.1的问题,您必须在ASPX页面中添加以下行:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

相关问题