具有Ruby后端的下划线模板不起作用

时间:2013-04-10 21:39:17

标签: ruby-on-rails ruby underscore.js

我正在使用下划线模板来创建用于制作引导下拉菜单的模板。代码在我自己的计算机上工作正常,但现在我将它添加到rails后端服务器上的ruby中。现在代码不再有效了。我被告知< %%>之间的代码被解释为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>

我得到的错误是&#34;未定义的变量array_of_items&#34;当然它没有定义,我稍后在

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

对于Javascript,下划线模板的工作方式与此类似,但对于Ruby,它不允许我出于某种原因在模板中使用未定义的变量,我该怎么办?

2 个答案:

答案 0 :(得分:0)

所以问题就在这里:

<% array_of_items.each do |obj| %>

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

答案 1 :(得分: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>