Я работаю над системой, в которой мы полагаемся на множество администраторов / менеджеров, отправляющих электронные письма пользователям из базы данных. Одной из ключевых функций является возможность отправки по электронной почте нескольким людям одновременно, с конкретной информацией, относящейся к каждому из них. Еще одна ключевая особенность - возможность создавать электронные письма вручную, поскольку, как правило, необходимо каждый раз слегка их модифицировать, но наличие базового шаблона экономит много времени.
Для этого у нас есть типичное решение «шаблоны», где у нас есть шаблон, который выглядит примерно так:
Hello {{recipient.full_name}},
Your application to {{activity.title}} has been accepted.
You have requested to participate on dates {{application.dates}}, in role {{application.role}}
Blah blah blah
Проблема, с которой мы сталкиваемся, состоит в том, что (как мы и ожидали) менеджеры не понимают идею «переменных» целиком, а делают такие вещи, как их перезапись, что не позволяет им отправлять по электронной почте более одного человека одновременно, предполагая, что они не собираются заменяться и что система сломана, или даже необъяснимые вещи, такие как "Hello {{John}}".
Большая проблема в том, что это не относится, как обычно, к разделу «администратор», где только несколько опытных пользователей имеют доступ к редактированию автоматически отправляемых шаблонов, и они должны знать, что они делают. Каждый пользователь системы сталкивается с этой проблемой.
Очевидным решением будет заменить переменные перед тем, как показывать этот шаблон для редактирования пользователем, но это не работает при отправке электронной почты нескольким людям.
Это кажется довольно распространенной проблемой, и мы надеемся, что кто-то уже решил ее.
Вы видели где-нибудь / создали / можете придумать хорошие решения этой проблемы?
Обновить
То, что я в итоге сделал, основываясь на ответе Дэниела Б., это обнаружение, основанное на позиции курсора и позиции {{}} в коде, находится ли пользователь в данный момент «внутри переменной» или «снаружи». Внутри я показываю небольшой фрагмент текста под большой текстовой областью, объясняющий, что он будет заменен, и что они могут полностью удалить его, если захотят, но не могут его редактировать.
Я делаю это onClick, onChange, onKeyDown, onKeyUp. Для событий «ключ», если мы находимся внутри переменной, я возвращаю значение ИСТИНА только в том случае, если код клавиши является одним из немногих «навигационных» клавиш. В противном случае я возвращаю FALSE, что эффективно предотвращает редактирование этой переменной.
Это не идеально, но это было очень дешево и кажется эффективным.