Баг контрола 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, время: 20:49. |