Closed tormozit closed 3 years ago
В этом поведении всё логично, кроме последнего шага про
Однако если удалить "("
Такое поведение у себя я воспроизвести не смог.
Вызов setCustomSignatures()
сам по себе не приводит к появлению подсказки по вызову метода, как это реализовано в showCustomSuggestions()
. Если после установки своих описаний ты не вызываешь triggerSigHelp()
, то при первой подсказке редактор и будет себя вести так, как ты описал. При повторном вызове пользовательские описания уже есть и показываются уже они.
Могу предложить добавить 3 опции. Например, disableNativeSuggestions
, disableNativeSignatures
и disableNativeHovers
. При их установке в true
соответственно не будут показываться стандартные подсказки, но будут генерироваться события.
Теперь сделал обработку события аналогично EVENT_BEFORE_SHOW_SUGGEST:
Если мРазрешеноПодсказкаМетодаHTML = Истина Тогда
мРазрешеноПодсказкаМетодаHTML = Ложь;
Возврат;
КонецЕсли;
РедакторHTML = ПолеТекста.ЭлементФормы.Документ.defaultView;
РедакторHTML.hideSignatureList();
РедакторHTML.setCustomSignatures(ирОбщий.ОбъектВСтрокуJSONЛкс(ВариантыСинтаксиса));
мРазрешеноПодсказкаМетодаHTML = Истина;
РедакторHTML.triggerSigHelp();
Почти все проблемы ушли. Осталось только первое срабатывание. При нем окно не появляется, хотя код отрабатывает.
Могу предложить добавить 3 опции. Например,
disableNativeSuggestions
,disableNativeSignatures
иdisableNativeHovers
. При их установке вtrue
соответственно не будут показываться стандартные подсказки, но будут генерироваться события.
Да. Кажется тогда работа с этими событиями станет прямее и понятнее, а то сейчас мне их второй раз приходится вызывать и код выглядит непрозрачно.
Новые опции заработали. После их включения я выключил вызовы скрытия штатных списков. Однако в остальном схема работы не изменилась - первый раз обрабатываю событие с формированием содержания подсказки и вызываю явно отображение окна подсказки, а следующий вызов события игнорирую.
а следующий вызов события игнорируют
Что это значит?
В слове "игнорируют" буква "т" была лишней. Исправил. Значит, что событие вызывается 2 раза вместо 1. Первый раз его вызываешь ты, а второй уже я через show/trigger...() и его обработку в этом случае мне уже надо НЕ делать.
Но я уже избавился от этого подхода и перешел на подавление второго вызова события через
РедакторHTML.enableBeforeSignatureEvent(Ложь);
РедакторHTML.enableBeforeShowSuggestEvent(Ложь);
Так что проблема уже не актуальна.
Проблема давняя. Но сегодня удалось найти ее достаточно надежное воспроизведение. Имею текст
Открываю его в свеже инициализированном поле редактора. Каретка сразу стоит между скобок. Нажимаю CTRL+SHIFT+SPACE. Срабатывает событие EVENT_BEFORE_SIGNATURE и отрабатывает мой код
РедакторHTML.setCustomSignatures(ВариантыСинтаксиса);
Строка из переменной ВариантыСинтаксиса При этом открывается подсказка по вызову метода со стандартным содержаниемНажимаю CTRL+SHIFT+SPACE еще раз. Все повторяется, но уже открывается подсказка по вызову метода с моим содержанием
Повторные нажатия CTRL+SHIFT+SPACE всегда отображают мое содержимое. Однако если удалить "("
и напечатать снова, то отобразится опять стандартное содержимое подсказки.