0

我有一个非常简单的主干视图,我想有条件地渲染一些 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。通过阅读 gem 的自述文件,我看不出我做错了什么。

任何帮助将非常感激!

4

2 回答 2

0

我也有同样的问题。你已经解决了吗?

我认为这是由于if语句被包装在__obj.push()编译的 JS 中的调用中引起的。例如,在我的脚本中,有一段代码

<%- 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以返回其他东西,但似乎更混乱(因为它是核心功能)。

于 2012-08-16T14:06:24.617 回答
0

或者,您可以使用后缀格式。

<%= "Hello World!" if true %>
于 2012-04-09T04:17:52.903 回答