我正在使用下划线模板来创建用于制作引导下拉菜单的模板。代码在我自己的计算机上工作正常,但现在我将它添加到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,它不允许我出于某种原因在模板中使用未定义的变量,我该怎么办?
答案 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>