2012-02-13 5 views
0

グーグルでやりたいことがほとんど見つかりません。Javascriptでコールバックとして処理する文字列または関数名のリストを渡すにはどうすればいいですか?

私のアプリケーションに必要なJAvascriptラインの量を減らすために、できるだけ多くの再利用可能な関数を使用しようとしています。

問題はもちろん、これらの機能を可能な限り柔軟にしようとしています。

私は、jQueryを使ってクローン関数によって動的に展開されるフォームを持っています。これを機能させるには、動的に作成された要素に対して、日付ピッカーを正しく初期化するなど、実行する必要のあるいくつかの追加機能があります。

これらの要件は、どのフォームが複製されているかによって異なります。

だから、次のように私は私のクローニング機能を呼び出す:

$('.button').click(function(){ 
    var thisID = $(this).attr('id').replace('add', ''); 
    cloneDetails(thisID, initialiseDates); 
}); 

cloneDetails機能は次のようになります。この場合

function cloneDetails(cur_num, callBackFunctions) { 

    /// do loads of stuff /// 

callBackFunctions(); 

}); 

、クローニング機能を実行し、それが必要なものを行います、 2番目の関数呼び出しを実行しますinitialiseDates

クローン機能の後に実行するいくつかの関数名を指定できますcloneDetails機能が実行された後に実行する関数の一覧を記載し、そのようなので

cloneDetails(thisID, 'initialiseDates, doSomethingElse, doAnotherThing'); 

として呼び出し、と、上。

私はcallBackメソッドを正しく設定しているとは思わないが、どうすればいいのかわからない。

大変助けになりました。

EDIT:これらの機能をすべて1つの機能にまとめたいのではなく、これらの機能をすべて独立して使用する必要があります。

+0

機能の配列を渡すことができます。 [initialiseDates、doSomethingElse、...] – designerrr

答えて

1

私はいくつかのアプローチを考えることができます:

  1. あなたは文字列を分割し、リスト内のそれぞれの名前でeval(name+'()')を使用することができます。 eval()はセキュリティ上問題があります。

  2. 文字列ではなく、関数を配列として渡すのはなぜですか? arguments[1..n]argumentsはすべての関数引数を含む自動変数)を繰り返し実行します。

  3. は、匿名関数を使用します。

    cloneDetails(thisID, function(){ 
        initialiseDates(); 
        doSomethingElse(); 
        doAnotherThing(); 
    }); 
    

私は最後のアプローチが好きなので:それは

  • 読み取り可能な最も柔軟
  • のみの数バイトを追加しています

    1. あなたがそれらを必要とするコード
    2. 最高のパフォーマンス
  • +0

    はい、オプション3はまさに私がどうやってやるのか分からなかったのです! 何かの理由で、私のinitializeDates関数は実際にはそのようには動作しません!他のものはそうですが、日付のものは普遍的な適用が可能ですので、私はクローン関数に含めました。ありがとう –

    1

    別のオプション(jQuery> 1.7を使用している場合):jQuery.Callbacks関数を使用できます。

    cloneDetails(thisID, $.Callbacks() 
        .add(initialiseDates, doSomethingElse, doAnotherThing)); 
    
    function cloneDetails(cur_num, callBackFunctions) { 
    
        /// do loads of stuff /// 
    
        callBackFunctions.fire(); 
    
    }); 
    
    関連する問題