Я працюю над системою, в якій ми покладаємось на базу даних про багато адміністраторів / менеджерів, що надсилають електронну пошту користувачам. Однією з ключових особливостей є можливість надсилати електронне повідомлення декільком людям одночасно з конкретною інформацією, що стосується кожної з них. Ще однією ключовою особливістю є можливість розробки електронних листів, оскільки, як правило, потрібно щоразу трохи змінювати їх, але наявність базового шаблону економить багато часу.
Для цього у нас є типове рішення "шаблони", де у нас є шаблон, який виглядає приблизно так:
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
Проблема, яка у нас виникає, очевидно, що (як ми і очікували) менеджери не мають усієї ідеї про "змінні", і вони роблять такі речі, як їх перезаписування, що не дозволяє їм надсилати електронну пошту більше, ніж одній людині одночасно, припускаючи вони не збираються замінюватись, а система порушена, або навіть незрозумілі речі, такі як "Привіт {{Джон}}".
Велика проблема полягає в тому, що це, як зазвичай, не відводиться до розділу "адміністратор", де лише деякі користувачі енергії мають доступ до редагування шаблонів, які автоматично надсилаються, і від них очікується знати, що вони роблять. Кожен користувач системи стикається з цією проблемою.
Очевидним рішенням було б замінити змінні, перш ніж цей шаблон буде показаний користувачеві для редагування, але це не працює при надсиланні електронною поштою кількох людей.
Це здається досить поширеною проблемою, і ми сподіваємось, що хтось це вже вирішив.
Чи бачили ви десь / створили / можете придумати хороші рішення цієї проблеми?
Оновлення
Що я в кінцевому підсумку робив на основі відповіді Даніеля Б - це виявлення на основі положення курсору та положення {{}} в коді, чи користувач наразі знаходиться "всередині змінної" чи "зовні". Всередині я показую невеликий фрагмент тексту нижче великої текстової області, в якій пояснюється, що це буде замінено, і що вони можуть його повністю видалити, якщо захочуть, але вони не можуть його редагувати.
Я роблю це onClick, onChange, onKeyDown, onKeyUp. Для подій "ключ", якщо ми перебуваємо всередині змінної, я повертаю TRUE лише у випадку, якщо keyCode є одним із кількох "навігаційних" клавіш. В іншому випадку я повертаю FALSE, що фактично перешкоджає виданню цієї змінної.
Це не ідеально, але це було дуже дешево, і здається ефективним.