2009-08-17 12 views
1

ありがとうございます。これは初めてのjQueryプラグインの開発です(実際にはJavascriptで初めて開発しています)。私はかなり気に入っていると言わざるを得ません(js/jquery開発者を熟練している人には恐ろしいことが多分あります。最初の試み - 私と一緒に負担してください:)。私はコードについても建設的な批判を歓迎する。jQueryプラグインの開発 - パラメータをユーザー定義のコールバック関数に渡す

これは、指定されたテキスト、ajax呼び出しのテキスト、または指定された/取得されたフォームを表示する、モデルボックスのプラグインです(はい、他にもありますが、仕事の要件によってサードパーティの依存関係を避けるために自分自身をコードすることが指示されます) ajax呼び出しからフォームの送信を処理します。これは可能な限りカスタマイズ可能でなければならないので、ユーザーがカスタムコードをプラグインに渡すために使用できるいくつかのフック(? - 匿名関数)を提供しようとしています。

私が抱えている問題は、ユーザー関数にパラメータを提供することです。キーワード 'this'を使用すると、 'msg'変数をうまく渡すことができ、ユーザー関数がそれを使用できます。しかし、 'this'の代わりに 'msg'を渡すと、ユーザーは空白の変数を取得します。私はmsgだけでなく、ajax呼び出しで渡されるデータの配列よりも多くを渡したいと思います。モデルボックスのjQueryオブジェクトは、私が本当にやりたいことです。

以下はスニペットです。この関数はプラグインの内部にあり、プラグイン内で呼び出されています。私はちょうどいくつかのコードを組織/開発目的のための関数にグループ化しました。

// Submits the form inside of the model box 
    // and calls the user hooks of onFormSuccess and 
    // onFormFailure for ajax success and error 
    function submitForm() { 
     var URL = $('form',$contentNode).attr('action'), 
     method = $('form',$contentNode).attr('method'), 
     data = $('form',$contentNode).formSerialize(); 

     $.ajax({ 
      url: URL, 
      type: method, 
      data: data, 
      success: function(msg) { 
       // Doesn't work, but I would like it too 
       //settings.onFormSuccess.call(msg, breakData(data)); 
       // Does work 
       settings.onFormSuccess.call(this); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       setings.onFormFailure.call(errorThrown); 
      } 
     }); 
     closeModel(); 
    } 
+0

tl dr;より短い例を提供できますか? – Greg

+0

さようなら、ごめんなさい –

答えて

5

call syntaxを参照してください。最初のパラメータは、thisがコールバック関数自体の内部にあるものを決定します。コールバック関数のパラメータとしてではなく、が渡されます。あなたがcallの残りのパラメータを使用するコールバックにパラメータを渡す

settings.onFormSuccess.call(thisArg, msg, dataArray); 

コールバックは、2つのパラメータを受け取り、そしてthisthisArgを指すで実行されます:

function successHandler(msg, dataArray) {} 

もう一つの問題をあなたのコードでthisの値は成功ハンドラは意味がありません。それはちょうどwindowオブジェクトを指すように見えるからです。したがって、コールバックコールはthis == windowでも実行されます。

関連する問題