gpt4 book ai didi

Node.js 和 underscore.js -- 模板化

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:48 25 4
gpt4 key购买 nike

好吧,我的问题很基本。我使用 Node.js 和 Underscore 作为注册模板引擎,使用 Expressjs 框架。我正在尝试创建部分内容。我希望能够做一些像您使用其他语言所做的事情:

<% include('header') %>
<body id="content">
<span>Blah</span>
</body>

<% include('footer') %>

你明白了。那么,有谁知道在 Node 上使用下划线来实现这一点的方法吗?

编辑:

<%
var isReturned = false;
var isSuccess = false;
if(typeof user != 'undefined'){
var isReturned = true;
}
if(typeof errors == 'undefined'){
var errors = null;
}

if(typeof success != 'undefined'){
isSuccess = true;
}
%>
<% _.template('header') %>
<h1><%= title %></h1>
<% if(isSuccess){ %>
<div style="background-color: green; border: 1px solid black; color: white; width: auto; display: inline-block; padding: 0.5em; border-radius: 5px;">You have successfully registered! <a href="/login">Click Here</a> to login.</div>
<% } %>

<form id="register" name="register" action="/register" method="POST">
<table>
<tr>
<td>
<label for="firstName">First Name:</label>
</td>
<td>
<input type="text" size=15 name="firstName" value="<% if(isReturned){ %> <%= user.firstName %> <% } %>"/>
</td>
<% if(errors != null && typeof errors.firstName !== 'undefined' && errors.firstName !== null){ %>
<td class="error"><%= errors.firstName.msg %></td>
<% } %>
</tr>
<tr>
<td>
<label for="lastName">Last Name:</label>
</td>
<td>
<input type="text" size=15 name="lastName" value="<% if(isReturned){ %> <%= user.lastName %> <% } %>"/>
</td>
<% if(errors != null && typeof errors.lastName !== 'undefined' && errors.lastName !== null){ %>
<td class="error"><%= errors.lastName.msg %></td>
<% } %>
</tr>
<tr>
<td>
<label for="email">E-mail:</label>
</td>
<td>
<input type="text" size=15 name="email" value="<% if(isReturned){ %> <%= user.email %> <% } %>"/>
</td>
<% if(errors != null && typeof errors.email !== 'undefined' && errors.email !== null){ %>
<td class="error"><%= errors.email.msg %></td>
<% } %>
</tr>
<tr>
<td>
<label for="password">Password:</label>
</td>
<td>
<input type="password" size=15 name="password"/>
</td>
<% if(errors != null && typeof errors.password !== 'undefined' && errors.password !== null){ %>
<td class="error"><%= errors.password.msg %></td>
<% } %>
</tr>
<tr>
<td>
<label for="confirm">Confirm Password:</label>
</td>
<td>
<input type="password" size=15 name="confirm"/>
</td>
<% if(errors != null && typeof errors.confirm !== 'undefined' && errors.confirm !== null){ %>
<td class="error"><%= errors.confirm.msg %></td>
<% } %>
</tr>
<tr>
<td colspan=2>
<input type="submit" size=15 name="submit" value="Register"/>
</td>
</tr>
</table>
</form>
<% _.template('footer') %>

这是我在收到评论后尝试的方法(我没有指定特定的网址,因为expressjs连接了一个 View 目录,并且仅指定模板的名称适用于项目的所有其他部分)。它现在只是无法解析页眉和页脚模板。

最佳答案

虽然 underscore.js 的模板引擎非常基础,但该模板可以执行任意 JavaScript 代码,这一事实使您可以执行几乎任何操作。

我设置了这个小辅助函数来渲染基于带有 id 的脚本 block 的模板:

_.include = function(id, data) { 
var template = document.getElementById(id).innerHTML;
return _.template(template)(data);
}

HTML 和模板的组合:

<script type="text/html" id='header'>
This is the header
</script>

<script type="text/html" id='footer'>
This is the footer
</script>

<script type="text/html" id='full'>
<%= _.include('header') %>
<h1><%= title %></h1>
<%= _.include('footer') %>
</script>

<div id='target'>
This text will be replaced by the output of rendering the templates
</div>

​有了这些,渲染模板、页眉和页脚就这么简单:

document.getElementById('target').innerHTML = _.include('full', { "title": "Title"});

​请注意,我尚未将任何内容传递到模板中的 _include 调用中。您可能可以传递您获得的参数(我只是还没有查找上下文变量的名称),或者您可以显式传递一个带有页眉和页脚需要的新对象:

<%= _.include('header', { 'title': title }) %>

可以在此处找到包含代码和 HTML 的 fiddle :http://jsfiddle.net/tUzcU/2/

关于Node.js 和 underscore.js -- 模板化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14043744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com