我正在尝试切换每个未标记的任务。 可行,
<% @untagged.each do |task| %>
var task_id = <%= task.id %>;
$(`#${task_id}`).fadeToggle();
<% end %>
但是,很奇怪,事实并非如此。
<% @untagged.each do |task| %>
const task_id = <%= task.id %>;
$(`#${task_id}`).fadeToggle();
<% end %>
据我了解,每个循环都会创建一个新块。常量声明将嵌套在每个这些块中,因此不会有任何重新声明。那么为什么第二个示例不起作用?
提前谢谢!
答案 0 :(得分:3)
您的代码做什么?
对于@untagged
中的每个元素,它都会生成以下代码行:
const task_id = FOO;
$(`#${task_id}`).fadeToggle();
,其中FOO
替换为元素ID。假设@untagged
看起来像这样:[<#Task @id = 23>, <#Task @id = 24>]
,那么生成的代码将看起来像这样:
const task_id = 23;
$(`#${task_id}`).fadeToggle();
const task_id = 42;
$(`#${task_id}`).fadeToggle();
在ECMAScript中,const
蚂蚁只能被声明和分配一次,因此,您会遇到静态错误。这就是常量在ECMAScript中的工作方式,与ruby-on-rails根本没有任何关系。