Форма Extjs и текстовая область не могут обрабатывать ввод в угловых скобках ('<>').Странное поведение, пользовательский интерфейс просто умирает - PullRequest
1 голос
/ 29 июня 2019

У меня есть форма extjs и текстовое поле внутри нее.

Когда вводится текстовое поле внутри формы и когда нажата кнопка «Сохранить», значение передается на серверную сторону.и некоторые операции выполняются с ним.

Все работало нормально, пока я не поместил ввод в текстовое поле что-то вроде:

enter image description here

С этим входом, когда нажата кнопка «Сохранить», весь пользовательский интерфейс просто умирает.И действительно, когда вход содержит угловую скобку ('<' или '>'), происходит то же самое.Первая строка моего обработчика кнопки «Сохранить» выглядит примерно так:

var form = Ext.ComponentQuery.query('#formPanel')[0];

При отладке, которую я видел, элемент управления никогда не выходит за пределы этой строки.Что-то явно ломается явно.

Также более странная вещь, когда я попытался записать этот ввод в редакторе stackoverflow, он просто убрал угловые скобки, причину, по которой разместил картинку для ввода.

Конечно, я что-то здесь упускаю.

Кроме того, не только пользовательский интерфейс умирает, но и записывает сессию, чтобы еще хуже для меня.

Я использую extjs 6.0.2, если это поможет.

Может кто-нибудь помочь мне с этим?

1 Ответ

1 голос
/ 05 июля 2019

ComponentQuery анализирует весь DOM, и он ломается, потому что интерпретирует строку как HTML-тег. (Обратите внимание, что квадратные скобки отображаются потому, что я не написал настоящие символы - они закодированы в HTML)

Вы должны получить свой компонент другими способами. Я предлагаю использовать reference , потому что он просто просматривает кэш ссылок владельца представления. Кроме того, это также намного быстрее.

Подробнее см. Эту ссылку из документации . Кстати, функцию lookupReference () можно также вызывать в родительском контейнере.

В дополнение к этим изменениям вы всегда должны избегать ввода, чтобы избежать подобных проблем и, самое главное: , чтобы избежать внедрения кода . Например, вы можете использовать функцию htmlEncode () .

...