Neugierig, ob ich das richtig mache und wenn nicht, wie ihr das angehen würdet.
Ich habe eine Jade-Vorlage, die einige Daten rendern muss, die aus einer MongoDB-Datenbank abgerufen wurden, und ich muss auch Zugriff auf diese Daten in einer clientseitigen JavaScript-Datei haben.
Ich verwende Express.js und sende die Daten wie folgt an die Jade-Vorlage:
var myMongoDbObject = {name : 'stephen'};
res.render('home', { locals: { data : myMongoDbObject } });
Dann kann ich in home.jade Dinge tun wie:
p Hello #{data.name}!
Welches schreibt aus:
Hello stephen!
Jetzt möchte ich auch Zugriff auf dieses Datenobjekt in einer clientseitigen JS-Datei haben, damit ich das Objekt mit einem Klick bearbeiten kann, bevor ich es auf den Server zurückschicke, um die Datenbank zu aktualisieren.
Dies konnte ich erreichen, indem ich das "Daten" -Objekt in einem versteckten Eingabefeld in der Jade-Vorlage speicherte und dann den Wert dieses Felds in meiner clientseitigen JS-Datei abrief.
In home.jade
- local_data = JSON.stringify(data) // data coming in from Express.js
input(type='hidden', value=local_data)#myLocalDataObj
Dann kann ich in meiner clientseitigen JS-Datei wie folgt auf local_data zugreifen:
In myLocalFile.js
var localObj = JSON.parse($("#myLocalDataObj").val());
console.log(localObj.name);
Dieses Stringify / Parsing-Geschäft fühlt sich jedoch chaotisch an. Ich weiß, dass ich die Werte meines Datenobjekts an DOM-Objekte in meiner Jade-Vorlage binden und diese Werte dann mit jQuery abrufen kann, aber ich möchte Zugriff auf das tatsächliche Objekt haben, das von Express in meinem clientseitigen JS zurückkommt.
Ist meine Lösung optimal, wie würden Sie dies erreichen?