Любопытный, если я делаю это правильно, и если не так, как вы, ребята, подходите к этому.
У меня есть шаблон Jade, который должен отображать некоторые данные, извлеченные из базы данных MongoDB, и мне также нужно иметь доступ к этим данным внутри файла JavaScript на стороне клиента.
Я использую Express.js и отправляю данные в шаблон Jade следующим образом:
var myMongoDbObject = {name : 'stephen'};
res.render('home', { locals: { data : myMongoDbObject } });
Затем внутри home.jade я могу делать такие вещи, как:
p Hello #{data.name}!
Что выписывает:
Hello stephen!
Теперь то, что я хочу, также имеет доступ к этому объекту данных внутри JS файла на стороне клиента, чтобы я мог манипулировать объектом, скажем, щелчком кнопки перед отправкой его обратно на сервер для обновления базы данных.
Я смог выполнить это, сохранив объект "data" внутри скрытого поля ввода в шаблоне Jade, а затем извлекая значение этого поля внутри моего JS файла на стороне клиента.
Внутри home.jade
- local_data = JSON.stringify(data) // data coming in from Express.js
input(type='hidden', value=local_data)#myLocalDataObj
Затем в моем JS файле на стороне клиента я могу получить доступ к local_data следующим образом:
Внутри myLocalFile.js
var localObj = JSON.parse($("#myLocalDataObj").val());
console.log(localObj.name);
Однако этот трудный бизнес/разбирательство чувствует себя грязным. Я знаю, что могу привязывать значения объекта данных к объектам DOM в моем шаблоне Jade, а затем извлекать эти значения с помощью jQuery, но я хотел бы иметь доступ к фактическому объекту, возвращающемуся из Express в моей клиентской стороне JS.
Является ли мое решение оптимальным, как бы вы, ребята, это сделали?