Sto creando un WYSIWYG
designer in Ember.js
. Il designer consentirà agli utenti di creare campagne - pensa MailChimp .
Per creare una campagna, gli utenti sceglieranno un modello esistente. Il modello avrà un layout definito. L'utente verrà quindi portato al designer, dove sarà in grado di modificare il testo e lo stile e inoltre modificare alcune opzioni di layout.
Ho pensato al modo migliore per strutturare questa app e ci sono alcuni ostacoli. Nello specifico, l'output della campagna sarà dinamico: alla fine, verrà pubblicato da qualche parte e quando i consumatori (non i miei utenti, ma le persone che fanno clic sulla campagna che il mio utente ha creato) visitano la campagna alcuni dati cambieranno a seconda del tipo di consumatore che visualizza la campagna.
Ciò significa che il risultato finale del designer sarà un sito dinamico. I dati dinamici per il questo sito - il prodotto finale - non saranno manipolati dall'utente nel designer. Tuttavia, i dati che verranno manipolati dall'utente nel designer sono cose come copia, stili, opzioni di layout, ecc. Chiamerò il primo set di dati sul lato server e il secondo lato client.
Sembra, quindi, che il processo andrà in questo modo:
- Avrò bisogno di creare modelli per questo designer che abbiano due segmenti dinamici. Ad esempio, i dati lato server potrebbero essere espressioni
Liquid
e le espressioniHandlebars
di dati lato client. - Quando l'utente crea una campagna, vorrei compilare il modello sul back-end utilizzando alcuni dati fittizi per le variabili lato server e pubblicare un modello
handlebars
nell'appEmber
. - L'utente quindi modificherà il modello e l'app
Ember
salverà tutte le sue modifiche alle variabili JS che alimentavano il modello. In questo modo sarebbe in grado di visualizzare l'anteprima del modello. - Quando salva, invierà il modello selezionato, insieme a tutti i dati e le opzioni che ha fatto.
-
Quando arriva il momento di pubblicare, il sistema di back-end dovrà fare due cose:
- compila il modello con
Handlebars
utilizzando i dati della campagna, quindi - compila il modello con
Liquid
utilizzando i dati lato server
- compila il modello con
Il mio pensiero è approssimativamente accurato a riguardo, oppure esiste un modo più semplice?