#sapui5
#sapui5
Вопрос:
Я знаю, как переопределить в UI5 поведение по умолчанию sap.m.Dialog
escapeHandler
через контроллер, например:
this._oDialog.setEscapeHandler((oEscapeHandler) => {
oEscapeHandler.reject();
});
Вопрос, возможно ли обеспечить альтернативное escapeHandler
поведение с помощью XML-шаблона без использования setEscapeHandler
?
В идеале это должно быть что-то вроде escapeHandler = "none/customFunction"
, например:
<Dialog
id = "authDialog"
title = "{i18n>DIALOG_TITLE}"
type = "Message"
escapeHandler = "%CUSTOM_ESCAPE_HANDLER%">
</Dialog>
В частности, я хочу отключить Dialog
закрытие при Escнажатии кнопки и сделать это элегантным, декларативным способом с помощью XML-шаблона, например escapeHandler = "none"
.
Комментарии:
1. Соответствующий запрос на улучшение: github.com/SAP/openui5/issues/1411
2. Дайте 👍 проблеме, чтобы сопровождающие знали, что исправление помогает и другим разработчикам 🙂
3. Также в github.com/SAP/openui5/issues/1908 что является более общим запросом на исправление оставшихся свойств, которые ожидают функции, но все еще
"any"
Ответ №1:
Появилась новая фиксация (объединенная сегодня), которая позволяет назначать функции контроллера escapeHandler
. Благодаря этому теперь возможен приведенный ниже код:
<Dialog xmlns="sap.m"
id="authDialog"
title="{i18n>DIALOG_TITLE}"
type="Message"
escapeHandler=".handleEscape"
>
handleEscape: function(pEscapePending) {
// Depending on the use case, call pEscapePending.resolve() or pEscapePending.reject() to overwrite the default behavior.
},
Исправление должно быть доступно с выпуском 1.86.
Комментарии:
1. Санта приходит в эти годы даже раньше, чем обычно!
2. Я протестировал его на 1.86, все работает отлично!
3. @MikeB. Я только что переименован
onEsc
вhandleEscape
. **on
**Something
является закрытым по умолчанию (не только по соглашению, но и по API). ИescapeHandler
ЭТО НЕ событие, а свойство, которое ожидает выполнения функции. Мы не можем передать туда параметры .4. @MikeB. Сам параметр не является обещанием, а является оболочкой вокруг внутреннего обещания, которое обрабатывает escape (src) . С другой стороны, в документе также упоминается «Это свойство ожидает функцию с одним параметром типа Promise . В функции вы должны вызвать либо
resolve()
илиreject()
для объекта Promise .» … Давайте просто притворимся, что это обещание 🙂5.@MikeB. Вы можете назвать обработчик так, как хотите. Однако методы, начинающиеся с
on
, по умолчанию являются частными в контексте UI5 («если имя свойства не начинается с подчеркивания или с префикса «on», имя свойства будет автоматически добавлено в список общедоступных методов» (src)) и обычно зарезервировано для обработчиков событий. ПосколькуescapeHandler
это не событие и поскольку обработчик может также использоваться другими классами, обработчик неon
должен начинаться с.
Ответ №2:
Я решил эту проблему, указав свойство escapeHandler = "customFunction"
, а затем создав функцию без реализации в контроллере. В основном у customFunction
меня был комментарий, объясняющий, что это используется для переопределения поведения escape по умолчанию.
Комментарии:
1. Я попробовал ваш подход, добавив
escapeHandler = "customFunction"
кDialog
тегу внутриDialog
XML-фрагмента, но это не сработало. Не могли бы вы, пожалуйста, поделиться каким-нибудь фрагментом кода, возможно, я пропустил что-то незначительное, но все же важное.2. Я проверил код, так как я написал это некоторое время назад, и я использовал setEscapeHandler перед открытием диалога, так что это в основном то же самое, что и вы. Ваше решение кажется немного лучше, у меня также был пустой метод вместо использования oEscapeHandler.reject() . Извините, что ввел вас в заблуждение, мне также было нелегко найти решение, и кажется, что использование escapeHandler=»customFunction» не сработает.