在 ejs 函数中传递 html 的语法问题
Syntax issues with passing through html in an ejs function
我想根据我的 mongo 数据库中存储的评分循环播放一个星标 svg。我单独测试了这个函数,所以我知道它应该可以工作,但是我在将函数插入我的 ejs 页面并将 html 添加到函数中时遇到语法问题。
这是我当前的功能。错误通常会说“意外的令牌';'”或“意外的令牌')'”,具体取决于我尝试格式化 ejs 以使一切正常的方式。我觉得我的格式只是让 ejs 误读,但我无法弄清楚问题所在。
<% function repeatStringNumTimes(string, times) {%>
<% return string.repeat(times)};%>
<%repeatStringNumTimes(%>
<%= <i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"></i> %>
<%, review.rating); %>
这是下面的测试函数,它在没有 ejs 或 html 实现的情况下工作。
function repeatStringNumTimes(string, times) {
console.log(string.repeat(times));
}
repeatStringNumTimes(`a`, review);
我已经在没有 ejs 和 html 的情况下测试了该功能。我尝试了几种不同的 ejs 标签——老实说,我对这些标签以及在哪里使用它们都不是很了解。我可能为 html 使用了错误的标签。我绝对有正确的对象字符串等用于调用数据库,以及带有 类 的 svg 我已经测试过并且它们工作正常。
已解决 - 使用变量传递 html 字符串。使用 <%- 标签传递实际调用的函数。
<!-- GOT IT TO WORK!! -->
<% let str=`<i class="bi-star-fill" style="color: #FD4;"></i>`;%>
<%function repeatStringNumTimes(str, times) { %>
<%return str.repeat(times); %>
<% } %>
<%- repeatStringNumTimes(str, review.rating); %>
尝试修复 i-tag;我想“review.rating”是您 i-tag:
的正确选择
<i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"> <%= review.rating %> </i>
到目前为止我明白了,你的“review.rating”returns 一个从 1 到 5 的值,取决于你想要用星号填充你的 ejs 文件的值,对吗?
<% for ( let i = 1; i <= <%= review.rating %> ; i++ ){ %>
<i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"></i>
<% }; %>
SOLVED- 使用变量传递 html 字符串(这似乎主要是为了让我缩短函数中每一行的长度,因为我的格式化程序不喜欢我的 ejs 代码并且会重新格式化不正确)。我使用 <%- 标记来传递实际调用的函数。
<!-- GOT IT TO WORK!! -->
<% let str=`<i class="bi-star-fill" style="color: #FD4;"></i>`;%>
<%function repeatStringNumTimes(str, times) { %>
<%return str.repeat(times); %>
<% } %>
<%- repeatStringNumTimes(str, review.rating); %>
我想根据我的 mongo 数据库中存储的评分循环播放一个星标 svg。我单独测试了这个函数,所以我知道它应该可以工作,但是我在将函数插入我的 ejs 页面并将 html 添加到函数中时遇到语法问题。
这是我当前的功能。错误通常会说“意外的令牌';'”或“意外的令牌')'”,具体取决于我尝试格式化 ejs 以使一切正常的方式。我觉得我的格式只是让 ejs 误读,但我无法弄清楚问题所在。
<% function repeatStringNumTimes(string, times) {%>
<% return string.repeat(times)};%>
<%repeatStringNumTimes(%>
<%= <i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"></i> %>
<%, review.rating); %>
这是下面的测试函数,它在没有 ejs 或 html 实现的情况下工作。
function repeatStringNumTimes(string, times) {
console.log(string.repeat(times));
}
repeatStringNumTimes(`a`, review);
我已经在没有 ejs 和 html 的情况下测试了该功能。我尝试了几种不同的 ejs 标签——老实说,我对这些标签以及在哪里使用它们都不是很了解。我可能为 html 使用了错误的标签。我绝对有正确的对象字符串等用于调用数据库,以及带有 类 的 svg 我已经测试过并且它们工作正常。
已解决 - 使用变量传递 html 字符串。使用 <%- 标签传递实际调用的函数。
<!-- GOT IT TO WORK!! -->
<% let str=`<i class="bi-star-fill" style="color: #FD4;"></i>`;%>
<%function repeatStringNumTimes(str, times) { %>
<%return str.repeat(times); %>
<% } %>
<%- repeatStringNumTimes(str, review.rating); %>
尝试修复 i-tag;我想“review.rating”是您 i-tag:
的正确选择<i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"> <%= review.rating %> </i>
到目前为止我明白了,你的“review.rating”returns 一个从 1 到 5 的值,取决于你想要用星号填充你的 ejs 文件的值,对吗?
<% for ( let i = 1; i <= <%= review.rating %> ; i++ ){ %>
<i class="bi-star-fill" style="font-size: 1rem; color: #FD4;"></i>
<% }; %>
SOLVED- 使用变量传递 html 字符串(这似乎主要是为了让我缩短函数中每一行的长度,因为我的格式化程序不喜欢我的 ejs 代码并且会重新格式化不正确)。我使用 <%- 标记来传递实际调用的函数。
<!-- GOT IT TO WORK!! -->
<% let str=`<i class="bi-star-fill" style="color: #FD4;"></i>`;%>
<%function repeatStringNumTimes(str, times) { %>
<%return str.repeat(times); %>
<% } %>
<%- repeatStringNumTimes(str, review.rating); %>