我有一个非常简单的Backbone View,我希望有条件地渲染一些HTML块。我看到一种行为,其中跟随有条件渲染的HTML,也有一个整数渲染。据我所知,当我使用end
语句终止条件块时,似乎会发生这种情况。
以下是一些为我演示错误的代码:
<% if true: %>Hello World!<% end %>
我希望这会将Hello World!
呈现到包含元素中。但是,它实际上是渲染Hello World!2
。
如果我在同一个模板中添加了几个块:
<% if true: %>Foo, <% end %>
<% if true: %>Bar, <% end %>
<% if true: %>Baz<% end %>
我希望这会将Foo, Bar, Baz
呈现到包含元素中。但是,它实际上是渲染Foo, 2 Bar, 5 Baz8
。运行一组稍微大一些后,似乎每次打印的整数都会增加3。从阅读宝石的README开始,我看不到任何错误。
非常感谢任何帮助!
答案 0 :(得分:0)
或者您可以使用后缀格式。
<%= "Hello World!" if true %>
答案 1 :(得分:0)
我有同样的问题。你已经解决了吗?
我认为这是由 if 语句包含在已编译的JS中的__obj.push()
调用中引起的。例如,在我的脚本中,有一段代码
<%- if !@blok: %>
<%- to_html(@create_link('c', @session['course'])) %>
<%- end %>
汇编到
[1] __out.push(!this.blok ?
[2] (__out.push('\n '),
[3] __out.push(to_html(this.create_link('c', this.session['course']))),
[4] __out.push('\n ')
[5] ) : void 0)
如果我理解正确,则意味着它会首先将\n
(函数的结果,另一个\n
推送到输出。但是最后一个push
(第4行)将返回数组中元素的数量,而这些元素又将由外部push
(第1行)推送到数组本身。
我试图改变Array.prototype.push
以返回别的东西,但似乎更混乱(因为它是核心功能)。