EJS模板语言内部逻辑以某种方式失败

我正在使用EJS partials,并且即使在浪费了数小时的debugging之后,我也遇到了一个我根本找不到的bug。

这是加载部分的代码:

<%- 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来帮助我理解发生了什么事情,因为我只是在设置图标时才会显示图标,如果未定义, icon_popover = typeof icon_popover != 'undefined' ? icon_popover : false其设置为falseicon_popover = typeof icon_popover != 'undefined' ? icon_popover : false icon_popover = typeof icon_popover != 'undefined' ? icon_popover : false

这里是服务器日志:

 --------------------------string true --------------------------boolean false 

所以基本上,无论是string还是false ,它进入我的if语句<% if(icon_popover){ %> ,我不知道为什么。

我做了更多的testing,如<% if(icon_popover !== false){ %><% if(icon_popover === 'http://placehold.it/64x64'){ %>相同的结果。

所以我真的不明白这一点,我认为这可能与一些EJS内部问题或caching有关,但无论如何,它真的很奇怪,日志显示的东西似乎是合乎逻辑的,但并不这样做…

这与EJS失败没有任何关系,实际上是因为一个JavaScriptdynamicparsing,总是把第一个元素,它有图标。 生成的源代码是正确的,但它的使用并不总是显示相同。

这里没有黑暗的魔法。 🙂

看起来像一个范围问题。 我不知道你的工具链的细节,但可能“参数”要么在全局名称空间中,要么在一个通用名称空间中。 检查你的文档,看看如何创build局部variables(或者也许这是不可能的)。如果你找不到其他东西,试着把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,但这是一个值得尝试的猜测。