Баг контрола filefield
Коллеги, столкнулся с багом контрола выбора файла filefield.
Баг заявлен тут. Судя по всему его исправили в 6.0.1, но получить эту версию по GPL нельзя. Баг воспроизводится в Хроме 48.0.2564.109. В ИЕ11 не воспроизводится. Собственно проблема - при клике по полю или его лейблу (focus на контейнер контрола) вся форма (panel) съезжает вверх. Если сразу нажать на выбор файла, то всё ок. Визуально получается вот так: http://img.prntscr.com/img?url=http:...om/L0VeA48.png Кто-нибудь решал подобную проблему? Или есть предложение какого-нибудь воркэраунда? Спасибо. Вот код формы:
Ext.define("ImportTemplates.view.main.Main", {
extend: "Ext.form.Panel",
xtype: "form-fileuploads",
controller: "form-fileuploads",
border: 0,
bodyStyle: "background:transparent;",
defaults: {
layout: "anchor"
},
items: [
{
xtype: "form",
frame: true,
bodyPadding: "10 10 0",
reference: "firstForm",
defaults: {
anchor: "100%",
allowBlank: false,
msgTarget: "side",
labelWidth: 80
},
items: [
{
xtype: "datefield",
fieldLabel: "Дата старта",
format: "d.m.Y",
name: "dob",
allowBlank: false,
maxValue: new Date()
}, {
xtype: "filefield",
fieldLabel: "Файл",
name: "photo-path",
buttonText: "",
buttonConfig: {
icon: "resources/excel.gif"
}
}, {
xtype: "combobox",
reference: "operators",
fieldLabel: "Оператор",
displayField: "operator",
store: {
type: "operators"
},
queryMode: "local",
minChars: 0,
typeAhead: true
}
],
buttons: [
{
text: "Загрузить",
handler: "firstFormSave"
}, {
text: "Очистить",
handler: "firstFormReset"
}
]
}
]
});
|
А в фидле можете воспроизвести? Я попытался, не вышло. Заодно вопрос: зачем вы вкладываете форму в форму?
|
Цитата:
Цитата:
Цитата:
подводных камней, а что уж говорить про ExtJS. |
Я помню, что менял стили файлового поля, но конкретно этот баг не помню. Пыщ. Надо пофиксить.
Если у вас нет доступа к 6.0.1, то изменения SASS вам наверное и ни к чему. Используйте вот такой CSS хак в Chrome:
input.x-form-file-input {
top: 0;
right: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
И тоже повторю вопрос Infarch: зачем у вас внешний контейнер наследуется от Ext.form.Panel, если вы вкладываете в него ещё один контейнер с xtype: form? Точнее, зачем вообще нужен внешний контейнер? Это классический пример излишней структуры. |
nohuhu,
Спасибо за рекомендации и разъяснения. К сожалению предложенный хак не решил проблему :(. Пробовал и с !important и собственным именем класса. Результат по клику на filefield тот же самый: сползает вверх. Также проникся по поводу контейнеров. Честно говоря, это мой первый проект на ExtJS, поэтому что-то частично копипастилось с открытых примеров . Несколько переделал. Так корректнее?
Ext.define("ImportTemplates.view.main.Main", {
extend: "Ext.container.Container",
xtype: "container",
defaults: {
xtype: "panel",
controller: "panel",
frame: true,
bodyPadding: 10,
layout: "anchor"
},
items: [
{
defaults: {
anchor: "100%",
allowBlank: false
},
items: [
{
xtype: "datefield",
name: "startdate",
reference: "startdate",
fieldLabel: "Дата старта",
format: "d.m.Y",
maxValue: new Date()
}, {
xtype: "combobox",
name: "operators",
reference: "operators",
fieldLabel: "Оператор",
displayField: "operator",
store: {
type: "operators"
},
queryMode: "local",
minChars: 0,
typeAhead: true
}, {
xtype: "filefield",
name: "myfile",
reference: "myfile",
fieldLabel: "Файл",
buttonText: "",
buttonConfig: {
icon: "resources/excel.gif"
}
}
],
buttons: [
{
text: "Загрузить",
handler: "firstFormSave"
}, {
text: "Очистить",
handler: "firstFormReset"
}
]
}, {
title: "Результат обработки",
height: 200,
collapsed: true,
collapsible: true,
scrollable: true,
html: "Текст",
tools: [
{ type: "save" }
]
}
]
});
|
Рабочий "хак" найден! :victory:
Спасибо всем за помощь и идеи.
.z-filefield { pointer-events: none; }
.z-filefield-but { pointer-events: all; }
xtype: "filefield",
name: "myfile",
reference: "myfile",
fieldLabel: "Файл",
buttonText: "",
cls: "z-filefield",
buttonConfig: {
icon: "resources/excel.gif",
cls: "z-filefield-but"
}
ЗЫ: и кажется я понял, о каком фидле шла речь. Сначала про "фидлер" подумал :D |
А вот вам кстати и наглядная демонстрация бага на сайте производителя! :lol: Кликаем в разных точках, сразу под надписью "Photo:" на третьей сверху панельке "File Upload Form". В Хроме ;).
|
Цитата:
В 6.0.1+ этот баг не проявляется, потому что я менял CSS для других целей и случайно пофиксил эту проблему тоже. Бывает. :) С pointer-events: none аккуратнее, проверьте что работает как нужно во всех браузерах. С Firefox периодически бывают проблемы на эту тему. Лучше всего такие хаки применять к конкретному браузеру и через правила с высокой специфичностью, чтобы не создавать себе лишних проблем. Цитата:
В принципе разница между Ext.panel.Panel и Ext.form.Panel небольшая, особенно если вы не используете встроенные механизмы загрузки и отправки формы. С другой стороны, какой смысл их не использовать? |
| Часовой пояс GMT +3, время: 23:18. |