4

私はコーヒースクリプトを初めて見ています。私は隠されたパターンの方法論に精通していますが、私はまだオブジェクトプロトタイプの周りを頭で囲んでいます。入れ子になった匿名関数内のCoffeeScriptクラスのプロパティ

サイトのセクションを制御するための基本クラスを作成しようとしています。私が実行している問題は、別のスコープ内で定義されたクラス変数を失うことです。たとえば、以下のコードは正しく動作し、オブジェクト内のプロパティを完全に作成します。しかし、私がjQueryコールバックに飛び込むと、複数の用途のためにいくつかのjQueryオブジェクトを格納しているクラス変数についての知識がなくなります。

コールバック関数からそれらを取得する方法はありますか?そう

...コールで使用されるAJAXの設定を表すオブジェクト($.ajaxSettings$.ajaxに渡された設定と合併)

:jQueryのAJAXコールバックがexecuted in the context ofある

class Session 
    initBinds: -> 
     @loginForm.bind 'ajax:success', (data, status, xhr) -> 
      console.log("processed") 
      return 
     @loginForm.bind 'ajax:before', (xhr, settings) -> 
      console.log @loader // need access to Session.loader 
      return 
     return 
    init: -> 
     @loginForm = $("form#login-form") 
     @loader = $("img#login-loader") 
     this.initBinds() 
     return 

答えて

4

@(AKA this)は、コールバックが呼び出されたときのSessionインスタンスではありません。この周りのCoffeeScriptっぽい方法はfat-arrowを使用して、セッションのインスタンスへのコールバックをバインドすることです:

脂肪矢印=>は、関数を定義し、thisの現在の値にバインドするの両方に使用することができますその場で右。プロトタイプやjQueryのようなコールバックベースのライブラリを使用する場合に、便利です...

私はあなたがこの言いたいと思う:

@loginForm.bind 'ajax:before', (xhr, settings) => 
    console.log @loader // --------------------^^ 
    return 

をとしない限り、あなたはまったくreturnを必要としませんあなたのコールバックの最後のステートメントは、AJAX呼び出しをキャンセルしたくないときに、誤ってfalseと評価されるかもしれません。

@loginForm.bind 'ajax:before', (xhr, settings) => 
    console.log @loader // --------------------^^ 
    true 
+0

エクセレント:あなたは偏執的であることを(彼らはは本当に私たちを取得するために出ているので、合理的な位置)を最後に簡単なtrueは、コールバックから返された非false値を取得するには十分であろうしたい場合。冗長な応答をありがとうございます。太い矢は私が探していたものです。 – Aric

関連する問題