2011-10-25 17 views
1

私は、アクションが実行されるときに呼び出されるjavascript関数のセットを持つユーザーコントロールで作業しています。このユーザーコントロールは、アプリケーション内の多くの場所で使用されます。関数の実行が完了したときに関数を呼び出す方法は? - Javascript

作り付けのJS機能の一つが実行を完了すると、私は私のページにカスタムJS機能を起動する必要があります。

私は別の関数が実行を完了したときに起動される機能を添付するための方法はありますか?このJS関数を呼び出すために組み込みのJS関数を更新したくありません。

希望はこれが理にかなっています。

+0

あなたが「作り付け」とはどういう意味ですか? –

+0

万が一、ビルトイン関数が非同期ですか?もしそうなら、それはコールバックを受け入れますか?作り付けのことで – pimvdb

+0

は、私は単にこの関数は、このユーザーコントロール(ASP.NET) – Nick

答えて

4

あなたが特定の(あなたが共有されていない)のコードとどのようなことができますし、変更することはできませんに応じて、このために使用することができますカップルのデザインパターンがあります。

オプション1:いくつかの既存のコードにコールバックを追加します。 :

function mainFunction(callbackWhenDone) { 
    // do other stuff here 
    callbackWhenDone(); 
} 

だから、あなたがこれを呼び出すことができます。

mainFunction(myFunction); 

のOptiラップ前の関数::

obj.oldMethod = obj.mainFunction; 
obj.mainFunction = function() { 
    this.oldMethod.apply(this, arguments); 
    // call your stuff here after executing the old method 
    myFunction(); 
} 

だから、今、いつでも誰かが行います。2に

obj.mainFunction(); 

それは、元のメソッドを呼び出した後、あなたの関数を呼び出します。

2

あなたは基本的にコールバックを試みています。あなたは(コードのように)あなたが話している関数について言及していないので、基本的なことは、基本的には、クイックとダーティな関数をラップし、コールバックで動作させることです。あなたはラムダ(無名関数)を渡すと、それが終了したとき、あなたが欲しいものを実行することができる方法

コールバックを追加する方法を示すために更新

function my_function($a, $callback) { 
    alert($a); 
    $callback(); 
} 

my_function('argument', function() { 
    alert('Completed'); 
}); 
+0

を非同期ではないです。JS/Jqueryでコールバックを実装する方法の例があるかどうか – Nick

+0

inbuilt関数がコールバックを受け入れない場合:( – Nick

+0

単純な例を追加 – MarioRicalde

2

醜いと最善の解決策は、組み込み関数をパッチサルにあります。組み込み関数は、「第三者」と呼ばれていると仮定します

// first, store a ref to the original 
var copyOfThirdParty = thirdParty; 
// then, redefine it 
var thirdParty = function() { 
    // call the original first (passing any necessary args on through) 
    copyOfThirdParty.apply(this, arguments); 
    // then do whatever you want when it's done; 
    // custom code goes here 
    customFunction(); 
}; 

私たちは、基本的に今までに元のバージョンに触れることなく、組み込み関数の修正版を作成しました。

1

Javascriptが使用すると、そのソースコードを変更せずに元の関数を変更することができ非常に動的であるので:

function connect_after(before, after){ 
    return function(){ 
     before.apply(this, arguments); 
     after(); 
    }; 
} 

var original_function = function(){ console.log(1); } 
original_function = connect_after(original_function, function(){ console.log(2); }) 
関連する問題