我应该如何使用 if else 和 for 循环与 .hbs 文件 (Handlebars.js)?
How should i use if else and for loop with .hbs file (Handlebars.js)?
我知道如何使用 if else 语句或使用 .ejs 文件进行循环,但我需要更改 .hbs 文件中的代码,我是新手 this.Please 帮助我完成以下示例使用过的 .ejs 文件我需要将其转换为 .hbs 文件但不知道如何更改 if else 和 for loop
<!DOCTYPE html>
<html lang="en">
<head>
<title>Fetch using MySQL and Node.js</title>
</head>
<body>
<div class="table-data">
<h2>Display Data using Node.js & MySQL</h2>
<table border="1">
<tr>
<th>S.N</th>
<th>Full Name</th>
<th>Email Address</th>
<th>City</th>
<th>Country</th>
<th>Edit</th>
<th>Delete</th>
</tr>
<%
if(userData.length!=0){
var i=1;
userData.forEach(function(data){
%>
<tr>
<td><%=i; %></td>
<td><%=data.fullName %></td>
<td><%=data.emailAddress %></td>
<td><%=data.city %></td>
<td><%=data.country %></td>
<td><a href="/users/edit/<%=data.id%>">Edit</a></td>
<td><a href="/users/delete/<%=data.id%>">Delete</a></td>
</tr>
<% i++; }) %>
<% } else{ %>
<tr>
<td colspan="7">No Data Found</td>
</tr>
<% } %>
</table>
</div>
</body>
</html>
我使用了下面的代码,但它不起作用,因为我是新手,我需要你的指导
@76484 i have used this ``` {{#if userData.length != 0 }}
{{var i =1;}}
{{userData.forEach(function(data))}}
<tr>
<td>{{=i;}}</td>
<td>{{= data.fullName}}</td>
<td>{{= data.emailAddress}}</td>
<td>{{= data.city}}</td>
<td>{{= data.country}}</td>
<td>{{= data.Dimension_4_Score}}</td>
<td>{{= data.Total_Score_Persentage}}</td>
</tr>
{{i++; })}}
{{else{} }
<tr>
<td colspan="7">No Data Found</td>
</tr>
{{}}}
</table>
</div>
</body> ``` but it is not working
您的嵌入式 JS 示例与 Handlebars 之间的主要区别在于 Handlebars 不会 执行任意 JavaScript,就像您的 .forEach
循环一样。相反,Handlebars 提供 helpers 以允许您执行条件和迭代等操作。
首先,我们将解决您的情况,if (userData.length != 0)
。 Handlebars 有一个 #if
helper,我们可以用它来检查 userData
是否为真值(大于 0)length
。结果将是:
{{#if userData.length}}
{{! TODO: output each user data}}
{{else}}
<tr>
<td colspan="7">No Data Found</td>
</tr>
{{/if}}
其次,Handlebars 有一个 #each
helper 用于循环集合,就像您使用 userData.forEach(function(data) { /*...*/ }
代码一样。出于您的目的,语法为:
{{#each userData}}
<tr>
<td>{{ @index }}</td>
<td>{{ fullName }}</td>
<td>{{ emailAddress }}</td>
<td>{{ city }}</td>
<td>{{ country }}</td>
<td><a href="/users/edit/{{ id }}">Edit</a></td>
<td><a href="/users/delete/{{ id }}">Delete</a></td>
</tr>
{{/each}}
请注意我们如何计算 userData
数组中每个对象的属性。没有=
。我们只是将 属性 名称包裹在双把手中,例如 {{ fullName }}
。 Handlebars 处理 #each
中的执行上下文,因此我们始终引用数组的当前迭代。
另请注意 {{ @index }}
。这是一个由 Handlebars 提供的 special variable 来为我们提供 #each
循环中的当前迭代索引。它是零索引,因此我们的输出将与您的 ejs 示例略有不同,因为您将计数器初始化为 1。
不幸的是,如果我们希望我们的索引是基于一个的,我们将不得不为此写一个custom helper。我们的助手只需要取一个数字 @index
并将其递增 1。它看起来像:
Handlebars.registerHelper('increment', function (num) {
return num + 1;
});
我们将更新我们的模板以使用它:
{{increment @index }}
我用最后一个例子创建了一个fiddle供你参考。
我知道如何使用 if else 语句或使用 .ejs 文件进行循环,但我需要更改 .hbs 文件中的代码,我是新手 this.Please 帮助我完成以下示例使用过的 .ejs 文件我需要将其转换为 .hbs 文件但不知道如何更改 if else 和 for loop
<!DOCTYPE html>
<html lang="en">
<head>
<title>Fetch using MySQL and Node.js</title>
</head>
<body>
<div class="table-data">
<h2>Display Data using Node.js & MySQL</h2>
<table border="1">
<tr>
<th>S.N</th>
<th>Full Name</th>
<th>Email Address</th>
<th>City</th>
<th>Country</th>
<th>Edit</th>
<th>Delete</th>
</tr>
<%
if(userData.length!=0){
var i=1;
userData.forEach(function(data){
%>
<tr>
<td><%=i; %></td>
<td><%=data.fullName %></td>
<td><%=data.emailAddress %></td>
<td><%=data.city %></td>
<td><%=data.country %></td>
<td><a href="/users/edit/<%=data.id%>">Edit</a></td>
<td><a href="/users/delete/<%=data.id%>">Delete</a></td>
</tr>
<% i++; }) %>
<% } else{ %>
<tr>
<td colspan="7">No Data Found</td>
</tr>
<% } %>
</table>
</div>
</body>
</html>
我使用了下面的代码,但它不起作用,因为我是新手,我需要你的指导
@76484 i have used this ``` {{#if userData.length != 0 }}
{{var i =1;}}
{{userData.forEach(function(data))}}
<tr>
<td>{{=i;}}</td>
<td>{{= data.fullName}}</td>
<td>{{= data.emailAddress}}</td>
<td>{{= data.city}}</td>
<td>{{= data.country}}</td>
<td>{{= data.Dimension_4_Score}}</td>
<td>{{= data.Total_Score_Persentage}}</td>
</tr>
{{i++; })}}
{{else{} }
<tr>
<td colspan="7">No Data Found</td>
</tr>
{{}}}
</table>
</div>
</body> ``` but it is not working
您的嵌入式 JS 示例与 Handlebars 之间的主要区别在于 Handlebars 不会 执行任意 JavaScript,就像您的 .forEach
循环一样。相反,Handlebars 提供 helpers 以允许您执行条件和迭代等操作。
首先,我们将解决您的情况,if (userData.length != 0)
。 Handlebars 有一个 #if
helper,我们可以用它来检查 userData
是否为真值(大于 0)length
。结果将是:
{{#if userData.length}}
{{! TODO: output each user data}}
{{else}}
<tr>
<td colspan="7">No Data Found</td>
</tr>
{{/if}}
其次,Handlebars 有一个 #each
helper 用于循环集合,就像您使用 userData.forEach(function(data) { /*...*/ }
代码一样。出于您的目的,语法为:
{{#each userData}}
<tr>
<td>{{ @index }}</td>
<td>{{ fullName }}</td>
<td>{{ emailAddress }}</td>
<td>{{ city }}</td>
<td>{{ country }}</td>
<td><a href="/users/edit/{{ id }}">Edit</a></td>
<td><a href="/users/delete/{{ id }}">Delete</a></td>
</tr>
{{/each}}
请注意我们如何计算 userData
数组中每个对象的属性。没有=
。我们只是将 属性 名称包裹在双把手中,例如 {{ fullName }}
。 Handlebars 处理 #each
中的执行上下文,因此我们始终引用数组的当前迭代。
另请注意 {{ @index }}
。这是一个由 Handlebars 提供的 special variable 来为我们提供 #each
循环中的当前迭代索引。它是零索引,因此我们的输出将与您的 ejs 示例略有不同,因为您将计数器初始化为 1。
不幸的是,如果我们希望我们的索引是基于一个的,我们将不得不为此写一个custom helper。我们的助手只需要取一个数字 @index
并将其递增 1。它看起来像:
Handlebars.registerHelper('increment', function (num) {
return num + 1;
});
我们将更新我们的模板以使用它:
{{increment @index }}
我用最后一个例子创建了一个fiddle供你参考。