EJS模板语言内部逻辑不知何故失败了
EJS templating language internal logic fails somehow
我正在使用EJS部分,我遇到了一个错误,即使浪费了几个小时的调试时间,我也根本无法解决。。。
以下是加载部分的代码:
<%- partial(__view.partialPath('tag_popover'), {
title_popover: sentence.nickname,
content_tag: '#' + sentence.nickname,
icon_popover: 'http://placehold.it/64x64'
}) %>
<%- partial(__view.partialPath('tag_popover'), {
title_popover: 'Last revision',
content_tag: '#' + sentence.sentenceId
}) %>
这是tag_popover
部分:
<%
/**
* Creates a standalone tag with dynamic title, content and popover for additional content.
*
* @param classes_tag CSS classes. ['tags']
* @param content_tag Tag content.
* @param icon_popover Popover icon. [none]
* @param title_popover Popover title, will be displayed.
*/
title_popover = typeof title_popover != 'undefined' ? title_popover : ''
classes_tag = typeof classes_tag != 'undefined' ? classes_tag : 'tags'
icon_popover = typeof icon_popover != 'undefined' ? icon_popover : false
content_tag = typeof content_tag != 'undefined' ? content_tag : ''
%>
<li class="<%= classes_tag %>" title="<%= title_popover %>">
<a href="#"><%= content_tag %></a>
<%- partial(__view.partialPath('popover_revision_translation'), {
icon_popover: icon_popover
}) %>
</li>
最后是popover_revision_translation
部分:
<%
/**
* Creates a standalone popover with dynamic title and body.
*
* @param icon_tag Icon. [none]
*/
icon_popover = typeof icon_popover != 'undefined' ? icon_popover : ''
%>
<% console.log('--------------------------'+typeof icon_popover)%>
<% console.log(icon_popover ? true: false)%>
<div class="custom-popover-content hide" role="seealso">
<% if(icon_popover){ %>
<img src='<%= icon_popover%>' />
<% } %>
<span>Test</span>
</div>
所以基本上,我调用两次我的tag_popover
分部,一次有icon_popover
集合,一次没有icon_popover
。但它显示了两次图标,在第一个元素上,但在第二个元素上也显示了,我不想要任何图标。
因此,我在popover_revision_translation
中放入了一些console.log
,以帮助我了解发生了什么,因为我要求图标只有在设置时才渲染,如果未定义,则将其设置为false
:icon_popover = typeof icon_popover != 'undefined' ? icon_popover : false
。
以下是服务器日志:
--------------------------string
true
--------------------------boolean
false
所以基本上,无论它是string
还是false
,它都会进入我的if
语句<% if(icon_popover){ %>
,我不知道为什么。
我做了更多的测试,比如<% if(icon_popover !== false){ %>
或<% if(icon_popover === 'http://placehold.it/64x64'){ %>
,在这两种情况下我都得到了相同的结果。
所以我真的不明白,我认为这可能与一些EJS内部问题或缓存有关,但无论如何,日志显示的东西看起来很逻辑,但实际上并不是这样的,这真的很奇怪。。。
这与EJS失败无关,实际上是因为javascript动态解析总是采用第一个元素,该元素具有图标。生成的源代码是正确的,但它的使用并不总是一样。
这里没有黑魔法。:)
看起来像是范围问题。我不知道你的工具链的细节,但"参数"可能在全局名称空间或公共名称空间中。查看您的文档,了解如何创建局部变量(或者可能不可能。)如果您找不到其他内容,请尝试将var
放在每个定义前面,例如
var title_popover = typeof title_popover != 'undefined' ? title_popover : '';
var classes_tag = typeof classes_tag != 'undefined' ? classes_tag : 'tags';
var icon_popover = typeof icon_popover != 'undefined' ? icon_popover : false;
var content_tag = typeof content_tag != 'undefined' ? content_tag : '';
我不确定这是否可行,因为我不知道EJS,但这是一个值得尝试的猜测。
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 当一些承诺失败时,如何继续使用$q.all()
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 在Jquery中单击传播失败
- 网页上失败的javascript会导致所有其他脚本失败
- 带有对象解析的响应javascript ajax失败
- 一台特定计算机的Ajax请求数据未定义/失败
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- jQuery.getJSON失败,语法错误
- ng disabled在放入多个表达式时失败
- Jasmine单元测试在监视服务方法时失败
- jQuery分页下一页和上一页按钮在点击零或超过最后一页后失败
- 在iframe的情况下,jQuery html()将失败
- 在我的情况下,使用带有变量失败的 jquery 选择器
- CSS中的转换似乎失败了,原因是什么
- 在数组中插入对象失败
- Backbone fetch中的Ajax在fetch调用退出后完成,因此fetch调用中没有成功/失败事件
- EJS模板语言内部逻辑不知何故失败了