哈希错误上的Javascript迭代
我在迭代哈希时出错,但我不确定错误 在控制器中,我有一个散列,传递给Gon,如下所示:哈希错误上的Javascript迭代,javascript,html,ruby-on-rails,hash,Javascript,Html,Ruby On Rails,Hash,我在迭代哈希时出错,但我不确定错误 在控制器中,我有一个散列,传递给Gon,如下所示: @images = { "titleA" => "12345678" "titleB" => "123456789" "titleC" => "1234567890" } gon.images = @images <% @images.each do |image, key| %> <div id="<%= "#{image}" %
@images = {
"titleA" => "12345678"
"titleB" => "123456789"
"titleC" => "1234567890"
}
gon.images = @images
<% @images.each do |image, key| %>
<div id="<%= "#{image}" %>">
在视图主体中,我基于图像标题创建了一系列div id,如下所示:
@images = {
"titleA" => "12345678"
"titleB" => "123456789"
"titleC" => "1234567890"
}
gon.images = @images
<% @images.each do |image, key| %>
<div id="<%= "#{image}" %>">
我现在遇到的问题是,每当我点击任何一个div,不管它在ruby视图中的ID是“titleA”还是“titleB”或“titleC”,唯一被称为“12345678”的photoset。我的循环可能搞错了,但有人能帮忙吗
谢谢
注意:flickr和所有东西的代码都基于预先存在的函数,除了只返回一个键的photoset之外,所有东西都可以正常工作 因为JavaScript只有函数作用域(而不是块作用域),所以您必须将函数包装在一个新函数(闭包)中,永久捕获对
image
的引用:
for (var image in gon.images) {
document.getElementById(image).onclick = (function(image) {
return function() {
// flickr:"set"+gon.images[image]
}
})(image);
}
每个匿名函数内的image
变量绑定到函数外的同一变量。因此,在执行click
功能时,由于循环将全部完成,image
的值是循环中计算的最后一个值
归结起来就是:单击函数中的image
值是在函数执行时绑定的,而不是在函数创建时绑定的。