仅将For循环的最后一个值传递给JQuery click函数

仅将For循环的最后一个值传递给JQuery click函数,jquery,coffeescript,closures,Jquery,Coffeescript,Closures,我在CoffeeScript中有以下For循环,它循环遍历对象的属性: for buildingFrame of buildingNames $("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame) 似乎只有buildingFrame的最后一个值被传递给对@displayProperties的每次调用。在搜索网站时,我发现了我认为的原因: 之所以只使用循环中的最后一个值,是因为JavaScrip

我在CoffeeScript中有以下For循环,它循环遍历对象的属性:

for buildingFrame of buildingNames
  $("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)
似乎只有buildingFrame的最后一个值被传递给对
@displayProperties
的每次调用。在搜索网站时,我发现了我认为的原因:

之所以只使用循环中的最后一个值,是因为JavaScript是一种后期绑定语言,循环没有引入新的作用域。解决此问题的解决方案在JavaScript中给出,如下所示:

for(var i=0; i<barValues.length; i++) function(i){
  ...
}(i);

但这只会给我的编译器带来错误。有人能告诉我如何在CS中解决这个问题吗。谢谢大家

您可以使用
do
关键字:

for buildingFrame in buildingNames
    do (buildingFrame) ->
        $("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)

像这样的怎么样

for buildingFrame of buildingNames
  do (buildingFrame) =>
    $("#bt-#{buildingFrame}").click => @displayProperties(buildingFrame)
这将编译成以下JavaScript:

_fn = function(buildingFrame) {
  return $("#bt-" + buildingFrame).click(function() {
    return _this.displayProperties(buildingFrame);
  });
};

for (buildingFrame in buildingNames) {
  _fn(buildingFrame);
}

酷,我从来没有新的做接缝,因为它是专为我所经历的问题写的!
_fn = function(buildingFrame) {
  return $("#bt-" + buildingFrame).click(function() {
    return _this.displayProperties(buildingFrame);
  });
};

for (buildingFrame in buildingNames) {
  _fn(buildingFrame);
}