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