【问题标题】:Client side and Server side rendering of ejs templateejs模板的客户端和服务器端渲染
【发布时间】:2016-12-06 17:44:37
【问题描述】:
我一直想学习 NodeJS,以便能够在服务器端和客户端运行相同的代码。
我将 NodeJS 与 Express 和 EJS 一起使用。
所以。我有一个 .ejs 页面,其中包含大量 HTML、JS、CSS 和少量模板。为了正义,就这样吧:
the_list-->some.ejs
<ul>
<% for(i=0;i>the_list.length;i++) { %>
<li>the_list[i]</li>
<% } %>
</ul>
在服务器上进行一些渲染后,我们有一个完美的列表。
所以。
现在我想在客户端重新渲染它。我提出了一些 ajax 请求,现在我在 the_list 中有新项目。什么是正确的方法?
【问题讨论】:
标签:
node.js
ejs
server-side-rendering
client-side-templating
【解决方案1】:
根据 ejs templates documentation
var template = new EJS({
text: `
<ul>
<% for(i = 0; i < the_list.length; i++) { %>
<li>the_list[i]</li>
<% } %>
</ul>
`
});
var html = template.render({ the_list: data });
document.getElementById('list-wrapper').innerHTML = html;
【解决方案2】:
<div id="output"></div>
<script src="/assets/js/ejs.js"></script>
<script>
let blogPosts = [
{
title: 'Perk is for real!',
body: '...',
author: 'Aaron Larner',
publishedAt: new Date('2016-03-19'),
createdAt: new Date('2016-03-19')
},
{
title: 'Development continues...',
body: '...',
author: 'Aaron Larner',
publishedAt: new Date('2016-03-18'),
createdAt: new Date('2016-03-18')
},
{
title: 'Welcome to Perk!',
body: '...',
author: 'Aaron Larner',
publishedAt: new Date('2016-03-17'),
createdAt: new Date('2016-03-17')
}
];
var html = ejs.render(`<% for(let i = 0; i < posts.length; i++) { %>
<article>
<h2><%= posts[i].title %></h1>
<p><%= posts[i].body %></p>
</article>
<% } %>`, {posts: blogPosts});
// Vanilla JS:
document.getElementById('output').innerHTML = html;
</script>
从最新版本下载 ejs.js 或 ejs.min.js
【解决方案3】:
这应该可以,看起来你的问题是关系运算符 '>' 因为它永远不会输出任何东西。
<ul>
<% for(var i=0; i<the_list.length; i++) { %>
<li>
<a>
<%= the_list[i]%>
</a>
</li>
<% } %>
</ul>