Есть ли способ создать динамический частичный результат обработки сервера?
Я начал использовать NodeJS пару месяцев назад и столкнулся с небольшой проблемой с рендерингом партиалов. Я хотел бы включить частичное представление в некоторые шаблоны, но я хочу, чтобы это частичное генерировалось динамически с сервера (потому что это зависит от данных, извлеченных из БД и других вещей).
Я пытался создать помощник шаблона, чтобы сделать это, но так как обработка должна выполняться асинхронно, я не могу получить возврат html для записи в моем шаблоне.
В принципе, что было бы лучше для меня, было бы что-то похожее (этот код не работает, очевидно):
template_file.js
...
<div>
<%- generatePartial(data) %>
</div>
...
helper_middleware.js
module.exports = function registerAppHelpers(request, response, next)
{
var appHelpers = {};
appHelpers.generatePartial = function generatePartial(data)
{
if (request.isAuthenticated())
{
DB.findOne({ id: request.user.id }, function found(error, obj)
{
if (error)
...
if (obj)
{
return generatePartial1(data);
}
else
{
return generatePartial2(data);
}
});
}
else
{
return generatePartial3(data);
}
};
// Register the helpers as local variables to be accessed within a template.
for (var helper in appHelpers) {
response.locals[helper] = appHelpers[helper];
}
next();
};
Теперь я могу быть абсолютно не прав относительно того, как я хочу решить эту проблему, поэтому, если у вас есть какие-либо решения / другие предложения по этому поводу, не стесняйтесь.
PS: я использую ExpressJS и EJS.
1 ответ
Я думаю, что вы идете совершенно в неправильном направлении..
- Для чего нужен ejs?
ejs - это javascript, встроенный в html, поэтому вы можете создавать динамические html.
- поэтому, какая бы у вас ни была логика, просто напишите это в шаблоне ejs и дайте ему все обработать. вам просто нужно передать информацию в движок ejs.
Так что вместо
if (obj)
{
return generatePartial1(data);
}
else
{
return generatePartial2(data);
}
Я бы предложил захватить все данные
if (obj)
{
array1.push(data);
}
else
{
array2.push(data);
}
- а затем передать всю эту кучу данных в ejs, записать условия и всю логику в файл ejs и позволить ему обрабатывать логику html. например
res.render('template_file.js', {
array1: array1,
array2: array2
});