Sto lavorando su un sistema in cui contiamo molti "amministratori / amministratori" che inviano email agli utenti dal database. Una delle caratteristiche principali è la possibilità di inviare email a più persone contemporaneamente, con informazioni specifiche relative a ciascuna di esse. Un'altra caratteristica fondamentale è quella di essere in grado di creare e-mail artigianali, perché tende ad essere necessario modificarle leggermente ogni volta, ma avere un modello di base consente di risparmiare un sacco di tempo.
Per questo, abbiamo la tipica soluzione "templates", in cui abbiamo un modello che assomiglia a qualcosa del genere:
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 avendo è ovviamente che (come ci aspettavamo), i manager non ottengono l'intera idea di "variabili", e fanno cose come sovrascriverle, il che non consente loro di inviare più di una persona in una tempo, supponendo che quelli non vengano sostituiti e che il sistema sia rotto, o anche cose inspiegabili come "Hello {{John}}".
Il grosso problema è che questa non è relegata, come al solito, in una sezione "admin" dove solo pochi utenti esperti hanno accesso alla modifica dei modelli che vengono inviati automaticamente, e ci si aspetta che sappiano cosa sta facendo. Ogni utente del sistema viene esposto a questo problema.
La soluzione ovvia sarebbe sostituire le variabili prima che mostrano questo modello per l'utente da modificare, ma che non funziona quando invii email a più persone.
Questo sembra un problema abbastanza comune, e speriamo che qualcuno lo abbia già risolto.
Hai visto qualcosa / creato / puoi pensare a buone soluzioni a questo problema?
Aggiorna
Quello che ho finito per fare in base alla risposta di Daniel B stava rilevando, in base alla posizione del cursore, e posizione di {{}} nel codice se l'utente è attualmente "all'interno di una variabile" o "all'esterno". All'interno, mostro un piccolo pezzo di testo sotto la grande textarea che spiega che questo verrà sostituito, e che possono rimuoverlo completamente se lo desiderano, ma non possono modificarlo.
Lo faccio onClick, onChange, onKeyDown, onKeyUp. Per gli eventi "chiave", se siamo all'interno di una variabile, restituisco VERO solo se il codice chiave è uno dei pochi tasti "di navigazione". Altrimenti, restituisco FALSE, che impedisce efficacemente l'edizione di quella variabile.
Non è perfetto, ma è stato molto economico e sembra efficace.