【问题标题】:How to increment Ruby variable in erb template?如何在 erb 模板中增加 Ruby 变量?
【发布时间】:2016-04-25 14:15:00
【问题描述】:

我的问题是我有一个用 Javascript 编写的 for 循环,里面有一些 Ruby 代码:

<% i = 0 %>
for (var i = 0 ; i < array.length ; i++)
{
   alert("<%= i %>");
   <% i += 1 %>
}

而且我总是收到一个写有“0”的警报。 如何正确增加我的 i 变量?

【问题讨论】:

  • 什么是array?它是如何定义的?
  • 数组包含 6 个字符串:var array = ["january","march","may","july","september","october"];
  • 它来自 ruby​​ 还是 JS?
  • 这是一个 Javascript 数组,我有 6 个警报,但打印了 0 个。
  • 用英文写作时请使用英文标点。

标签: javascript ruby-on-rails ruby for-loop increment


【解决方案1】:

您的问题是通过 ERB 运行模板时没有发生循环。您有一个 JavaScript 循环,在通过 ERB 运行时根本不执行 - 它作为纯文本传递,ERB 仅在遇到 &lt;% .. %&gt;&lt;%= .. %&gt; 时才执行/替换

由ERB处理

<% i = 0 %>
for (var i = 0 ; i < array.length ; i++)
{
    alert("<%= i %>");
    <% i += 1 %>
}

在到达浏览器时变为以下内容:

for (var i = 0 ; i < array.length ; i++)
{
    alert("0");
}

因此,当您在 JS 中迭代数组时,您会在每次迭代时提醒常量 "0"。你想在你的 ERB 模板中写这个:

for (var i = 0 ; i < array.length ; i++)
{
    alert(i);
}

请记住,ERB 正在替换来自后端(您的数据库)的适当内容,并且不知道最终在前端(在浏览器中)的 JS 或与它的交互。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2011-11-05
    • 2019-06-08
    • 2015-12-31
    • 2018-03-21
    • 2022-06-15
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多