salexdv / bsl_console

Консоль кода для 1С 8.3 (Управляемые и обычные формы)
MIT License
293 stars 55 forks source link

После setOption("generateBeforeShowSuggestEvent", Ложь) генерируется событие EVENT_BEFORE_SHOW_SUGGEST #297

Open tormozit opened 1 year ago

tormozit commented 1 year ago

Адаптировал свой старый код взаимодействия с твоим редактором - перевел на вызовы setOption(). И у меня сразу стала возникать бесконечная рекурсия из-за того, что после setOption("generateBeforeShowSuggestEvent", Ложь) событие EVENT_BEFORE_SHOW_SUGGEST все равно вызывается

Процедура РедакторHTML_ОбработатьСобытие(Событие) Экспорт 
    Если Событие.event = "EVENT_BEFORE_SHOW_SUGGEST" Тогда
        РедакторHTML_ПередПоказомАвтодополнения(Событие.params.trigger, Событие.params.last_expression, Событие.params.last_word);
    КонецЕсли; 
КонецПроцедуры
Процедура РедакторHTML_ПередПоказомАвтодополнения(Триггер, ПоследнееВыражение, ПоследнееСлово)  Экспорт 
    РедакторHTML.setOption("showSnippetsOnCustomSuggestions", мСтруктураТипаКонтекста.ИмяОбщегоТипа = "Локальный"); 
        //РедакторHTML.enableBeforeShowSuggestEvent(Ложь);
    РедакторHTML.setOption("generateBeforeShowSuggestEvent", Ложь);
    РедакторHTML.showCustomSuggestions(СтрокаСпискаАвтодополненияHTML); // Рекурсивная петля
    РедакторHTML.setOption("generateBeforeShowSuggestEvent", Истина);
КонецПроцедуры
tormozit commented 1 year ago

После сброса этой опции редактор честно сообщает РедакторHTML.getOption("generateBeforeShowSuggestEvent") = Истина, т.е. какая то проблема с установкой опций в Ложь.

tormozit commented 1 year ago

Посмотрел определение функции setOption. Оказалось она асинхронная, о чем в описании вообще не упоминается https://github.com/salexdv/bsl_console/blob/develop/docs/set_option.md . А ведь это очень важный аспект поведения. Пока решил проблему прямой записью в набор свойств РедакторHTML.editor["generateBeforeShowSuggestEvent"] = Ложь; Предлагаю в функции setOption как минимум добавить возможность, а лучше всегда делать синхронное выполнение. Ну и конечно о ее асинхронности очень важно написать в самом начале ее описания.

tormozit commented 1 year ago

Исправил в своей ветке и отправил исправление в твою.

salexdv commented 1 year ago

Задержка установки опции там оказалась не просто так

tormozit commented 1 year ago

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