0

わかりました、フォームの中にこれがあります

<INPUT type="text" name="inputbox" value="">
<INPUT TYPE="button" NAME="button2" Value="Write" onClick="writeText(this.form)">

そして私はcoffeescriptから次の生成されたjavascriptを持っています

(function() {
  var writeText;

  writeText = function(form) {
    return form.inputbox.value = "ping";
  };

}).call(this);

writeTextを呼び出す方法を知る必要がありますか?

ボタンをクリックしても何も起こりません....function(){}。call(this)ラッパーを削除すると機能します。

ラッパーを削除できません。.call(this)を配置してwriteTextを呼び出す方法を知る必要があります。

4

1 に答える 1

1

これはスコーピングの問題であり、Coffeescriptは、グローバル名前空間の汚染を回避するために、すべてを独自のクロージャー内にラップします。2つの解決策があります。

  1. Coffeescriptの「--bare」オプションを使用してコンパイルします(最初からラッパーを配置しないようにします)。

  2. 実行時にブラウザに表示されるオブジェクトにcoffeescript関数をバインドします。このような:

window.writeText = (form) -> form.inputbox.value = "ping"

2番目のオプションでは、writeText関数はブラウザーのウィンドウオブジェクトにバインドされます。これは、thisスクリプトがブラウザーで実行されるときの暗黙的なオブジェクトです。

于 2012-07-28T19:28:02.263 に答える