Sto lavorando a un sistema in cui contiamo molti "amministratori / gestori" che inviano e-mail agli utenti dal database. Una delle funzionalità principali è la possibilità di inviare e-mail a più persone contemporaneamente, con informazioni specifiche pertinenti a ciascuna di esse. Un'altra caratteristica chiave è quella di essere in grado di creare e-mail a mano, perché tende ad essere necessario modificarle leggermente ogni volta, ma avere un modello base consente di risparmiare molto tempo.
Per questo, abbiamo la tipica soluzione "modelli", in cui abbiamo un modello che assomiglia a questo:
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
Il problema che stiamo riscontrando è ovviamente che (come ci aspettavamo), i manager non ottengono l'intera idea delle "variabili" e fanno cose come sovrascriverle, il che non consente loro di inviare più di una persona alla volta, supponendo quelli non verranno sostituiti e che il sistema è rotto, o anche cose inspiegabili come "Ciao {{John}}".
Il grosso problema è che questo non è relegato, come al solito, in una sezione "admin" in cui solo pochi utenti esperti hanno accesso alla modifica dei modelli che vengono inviati automaticamente e si aspettano che sappiano cosa stanno facendo. Ogni utente del sistema viene esposto a questo problema.
La soluzione ovvia sarebbe quella di sostituire le variabili prima di mostrare questo modello per la modifica da parte dell'utente, ma ciò non funziona quando si inviano email a più persone.
Sembra un problema ragionevolmente comune e speriamo che qualcuno l'abbia già risolto.
Hai visto da qualche parte / creato / puoi pensare a buone soluzioni a questo problema?
Aggiornare
Ciò che ho finito per fare in base alla risposta di Daniel B è stato rilevare, in base alla posizione del cursore e alla posizione di {{}} nel codice se l'utente si trova attualmente "all'interno di una variabile" o "esterno". All'interno, mostro un piccolo pezzo di testo sotto la grande area di testo che spiega che questo verrà sostituito e che possono rimuoverlo completamente se lo desiderano, ma non possono modificarlo.
Faccio questo onClick, onChange, onKeyDown, onKeyUp. Per gli eventi "chiave", se siamo all'interno di una variabile, restituisco VERO solo se keyCode è una delle poche chiavi "di navigazione". Altrimenti, ritorno FALSO, che impedisce efficacemente l'edizione di quella variabile.
Non è perfetto, ma era molto economico e sembra efficace.