Saya sedang mengerjakan suatu sistem di mana kami banyak mengandalkan "admin / manajer" untuk mengirim email kepada pengguna dari basis data. Salah satu fitur utama adalah dapat mengirim email kepada beberapa orang secara bersamaan, dengan informasi spesifik yang relevan bagi mereka masing-masing. Fitur utama lainnya adalah dapat membuat email kerajinan tangan, karena cenderung diperlukan untuk sedikit memodifikasinya setiap kali, tetapi memiliki templat dasar menghemat banyak waktu.
Untuk ini, kami memiliki solusi "template" yang khas, di mana kami memiliki template yang terlihat seperti ini:
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
Masalah yang kita hadapi jelas adalah bahwa (seperti yang kita harapkan), manajer tidak mendapatkan keseluruhan gagasan "variabel", dan mereka melakukan hal-hal seperti menimpa mereka, yang tidak membiarkan mereka mengirim email lebih dari satu orang sekaligus, dengan asumsi itu tidak akan diganti dan sistem rusak, atau bahkan hal-hal yang tidak dapat dijelaskan seperti "Halo {{John}}".
Masalah besar adalah bahwa ini tidak diturunkan, seperti biasa, ke bagian "admin" di mana hanya beberapa pengguna yang memiliki akses untuk mengedit templat yang dikirim secara otomatis, dan mereka diharapkan tahu apa yang mereka lakukan. Setiap pengguna sistem terkena masalah ini.
Solusi yang jelas adalah mengganti variabel sebelum menampilkan templat ini untuk diedit pengguna, tetapi itu tidak berfungsi saat mengirim email ke beberapa orang.
Ini sepertinya masalah yang cukup umum, dan kami berharap seseorang telah menyelesaikannya.
Pernahkah Anda melihat di mana saja / dibuat / dapat memikirkan solusi yang baik untuk masalah ini?
Memperbarui
Apa yang akhirnya saya lakukan berdasarkan jawaban Daniel B mendeteksi, berdasarkan posisi kursor, dan posisi {{}} dalam kode apakah pengguna saat ini "di dalam variabel" atau "di luar". Di dalam, saya menunjukkan sedikit teks di bawah textarea besar yang menjelaskan bahwa ini akan diganti, dan bahwa mereka dapat menghapusnya sepenuhnya jika mereka mau, tetapi mereka tidak dapat mengeditnya.
Saya melakukan ini onClick, onChange, onKeyDown, onKeyUp. Untuk peristiwa "kunci", jika kita berada di dalam variabel, saya hanya mengembalikan TRUE jika keyCode adalah salah satu dari beberapa kunci "navigasi". Kalau tidak, saya mengembalikan FALSE, yang secara efektif mencegah edisi variabel itu.
Itu tidak sempurna, tetapi sangat murah, dan tampaknya efektif.
Jawaban:
Dengan permintaan dari komentar di jawaban ChrisF, berikut ini satu solusi yang pernah saya gunakan:
Implementasi saya akhirnya terlihat seperti ini:
Ini memiliki penyorotan opsional variabel untuk membedakannya dari teks standar.
Pembatas variabel sebenarnya ada, mereka hanya memiliki warna foreground dan background yang sama.
Jelas, ini sangat berbeda dengan implementasi Anda, yang berbasis HTML. Saya mungkin akan melihat bagaimana editor Gmail diterapkan; tampaknya mirip dengan textarea, tetapi mampu memiliki gambar inline (smilies, dll), yang mirip dengan perilaku yang Anda cari.
sumber
Saya akan mempertimbangkan untuk mengubah bagaimana template disajikan kepada pengguna sehingga Anda dapat membuat bagian-bagian yang akan diubah oleh kode yang tidak dapat diedit. Sesuatu seperti ini:
Bit yang Anda tidak ingin pengguna ubah sekarang tidak dapat diedit. Anda dapat memasukkan tombol tutup sehingga mereka dapat menghapus item jika mereka tidak membutuhkannya. Anda juga dapat menyertakan teks penjelas dan / atau tooltips untuk menjelaskan apa arti
{{...}}
bit dan mengapa bit tersebut harus dibiarkan sendiri.Menggunakan sesuatu seperti Silverlight / WPF
WrapPanel
untuk setiap paragraf mungkin memberi Anda sesuatu yang memungkinkan setiap bagian (dapat diedit dan tidak dapat diedit) mengalir saat teks yang dikontrol pengguna tumbuh dan menyusut.sumber
WrapPanel
untuk setiap paragraf mungkin memberi Anda sesuatu seperti yang Anda inginkan.