0

我正在使用下划线模板来创建用于制作引导下拉菜单的模板。该代码在我自己的计算机上运行良好,但现在我将其添加到 ruby​​ on rails 后端服务器。现在代码不再有效。我被告知 <% %> 之间的代码被解释为 ruby​​ 代码而不是 javascript。我根本不知道 ruby​​,但是有人向我展示了如何编写 for 循环。

<!-- Dropdown Menu-->
<script type="text/template" id="dropdown">
  <div class="dropdown">
    <a class="dropdown-toggle" data-toggle="dropdown">
      <span> <%= name %> </span>
      <b class="caret"></b>
    </a>
    <ul class="dropdown-menu">
      <% array_of_items.each do |obj| %>
          <li> <a> <%= obj %> </a> </li>
      <% end %>
    </ul>
  </div>
</script>

我得到的错误是“未定义的变量array_of_items”当然没有定义,我稍后定义

this.$el.append(this.makeDropdown({
    name: this.name,
    array_of_items: [1,2,3,4]
}));

下划线模板对于 Javascript 的工作方式是这样的,但对于 Ruby,由于某种原因,它不允许我在模板中包含未定义的变量,我该怎么办?

4

2 回答 2

0

所以我认为的问题就在这里:

<% array_of_items.each do |obj| %>

Rails 将其解释为 ERB,并且由于没有在 Ruby 中声明变量,因此您会收到错误消息。尝试将您的 JS 代码添加到资产管道中?

于 2013-04-10T21:44:56.060 回答
0

Javascript 和 ruby​​ 的变量在完全不同的“范围”中;这里<% array_of_items %>应该定义为模板局部变量:

<% array_of_items = [1,2] %>
<%= array_of_items %>
<script>
  document.body.innerHTML += array_of_items;
  array_of_items = ['j', 's'];
  document.body.innerHTML += array_of_items;
  // var from js + var from ruby
  document.body.innerHTML += array_of_items + <% array_of_items %>; // #=> should be smth like `js12`
</script>
于 2013-04-10T21:45:17.310 回答