我在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中解决此问题。谢谢大家!
最佳答案
这样的事情怎么样?
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);
}