我在CoffeeScript中有以下For Of循环,循环遍历对象的属性:
for buildingFrame of buildingNames
$("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)
似乎只有buildingFrame的最后一个值传递给@displayProperties
的每次调用。搜索网站后,我发现了我认为的原因:Possible Answer
之所以只使用循环中的最后一个值,是因为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中解决这个问题。谢谢大家!
答案 0 :(得分: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);
}
答案 1 :(得分:1)
您可以使用do
关键字:
for buildingFrame in buildingNames
do (buildingFrame) ->
$("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)