1

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

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

似乎只有 buildingFrame 的最后一个值被传递给每次调用@displayProperties. 搜索该站点我发现我认为是这里的原因:可能的答案

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

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

我已经尝试在上面的 coffeScript 中使用此解决方案来尝试解决问题,如下所示:

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

但这只是给我的编译器错误。有人请告诉我如何在 CS 中解决这个问题。谢谢大家!

4

2 回答 2

2

这样的事情怎么样?

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);
}
于 2013-02-11T22:23:20.190 回答
1

您可以使用以下do关键字:

for buildingFrame in buildingNames
    do (buildingFrame) ->
        $("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)
于 2013-02-11T22:23:11.803 回答