Voglio creare un oggetto javascript da un modello. Il problema è che non so come sarà il modello in anticipo. Come semplice esempio, se ho avuto la funzione di modelloCreare oggetti Javascript da un modello
template = function (data) {
return {
title: data.title
}
}
poi ho potuto correre template({ title: "Steve" })
e tornare l'oggetto
{ title: "Steve" }
Perché data.title
non viene analizzato fino a quando io chiamo la funzione template. Ma sto costruendo un oggetto basato sull'input dell'utente in cui i nomi dei campi non sono noti in anticipo e potrebbero essere nidificati profondamente ovunque nell'oggetto.
Se si definisce l'oggetto che viene restituito in precedenza, il campo data.title
nell'esempio sarà già valutato e non utilizzerà i dati di input. Per esempio, io voglio essere in grado di definire l'oggetto modello come
obj = { title: this.title }
quindi ridefinire il modello come
template = function() {
return obj
}
e chiamare template.call({title:"Steve"})
. Ma al momento mi rimetto
{ title: undefined }
perché this.title
era già valutata quando ho definito obj
. Forse mi sto avvicinando a questo modo sbagliato, perché continuo ad arrivare alla conclusione che dovrei modificare la funzione stringendola, modificando la stringa per includere il codice non valutato this.title
e creando una nuova funzione dalla stringa. Ma sembra una pessima idea.
E attraversare l'oggetto alla ricerca di valori speciali da sostituire sembra costoso e complicato. Ho anche cercato una sorta di libreria di template di oggetti javascript ma non ho trovato nulla.
EDIT: Per rendere più chiaro che i dati di input e la struttura del modello non necessariamente corrispondere, mi può essere utile avere un modello che assomiglia
template = function (data) {
return {
name: "Alfred",
stats: {
age: 32,
position: {
level: 10,
title: data.title
}
}
}
}
e chiamare template({title:"Manager"})
per ottenere
{ "name": "Alfred", "stats": { "età": 32, "posizione": { "livello": 10, "title": "manager" } }}
http://api.jquery.com/jquery.extend/ – setec
Grazie, ma forse io avrei dovuto essere più chiaro: il problema di questo è che t I dati di input non corrisponderanno alla struttura del modello. I valori di input potrebbero dover essere collocati in una parte profondamente annidata dell'oggetto o più volte all'interno dello stesso oggetto. Non voglio "sapere" come appare quando chiamo la funzione template. –