Ответ 1
Спасибо за помощь, ребята, но я нашел решение на форуме sencha, который, кажется, работает:
В частности, следующий код в начале приложения:
delete Ext.tip.Tip.prototype.minWidth;
Я заметил с момента обновления до ExtJS 4.2, что всплывающие подсказки, отображаемые, когда текстовое поле имеет ошибку в нем, недостаточно широки, чтобы увидеть содержимое всплывающей подсказки - они всегда кажутся шириной 40 пикселей.
Вот тестовый пример, который показывает проблему:
<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>
В приведенном выше примере, если вы нажмете на поле, а затем щелкните его, не набрав ничего, в нем появится всплывающая подсказка, в которой говорится, что он не может быть пустым. Всплывающая подсказка недостаточно широка, чтобы увидеть сообщение, к сожалению. Кто-нибудь еще сталкивался с этим?
Спасибо!
Спасибо за помощь, ребята, но я нашел решение на форуме sencha, который, кажется, работает:
В частности, следующий код в начале приложения:
delete Ext.tip.Tip.prototype.minWidth;
это o ошибка extjs 4.2, он работает на firefox 19, но не в хроме 26
вы должны переопределить класс css для всплывающей подсказки:
.x-tip {
width: auto !important;
}
.x-tip-body {
width: auto !important;
}
.x-tip-body span {
width: auto !important;
}
Извините, я не могу помочь, это известная проблема с 4.2.0, которая, скорее всего, будет исправлена в следующей версии. См.: http://www.sencha.com/forum/showthread.php?257201
Как временное обходное решение, если вам не нужна динамическая калибровка контейнера наконечника, вы можете просто переопределить CSS
.x-tip-form-invalid, .x-tip-body-form-invalid {
width: 150px !important;
}
Все еще смотря на это время от времени из любопытства...
Я попытался сравнить источники 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();
Вы можете увидеть более подробную информацию в этом разделе форума.
Удаление 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.
Другим неплохим решением было добавить этот CSS:
.x-border-box .x-tip, .x-border-box .x-tip * {
box-sizing: content-box;
}
Но подсказки слишком большие.
Я попробую решение user826840 с переопределением Ext.tip.QuickTip.
Другим решением является переопределение минимальной ширины QuickTip, так как полевая компоновка создает новый QuickTip, который не полагается на QuickTip singleton (вопреки документации).
Ext.override(Ext.tip.QuickTip,{
minWidth: 200
});
Если вы столкнулись с проблемой на всплывающей подсказке EXTJS 4.2.1 в браузере IE. Вы должны добавить следующую строку на страницу ASPX:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">