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 に答える