2012-03-14 12 views
0

イベントキューに登録したい機能があります。この機能を実行するとき、キューから退会する必要があります。他の機能への呼び出しを含む機能の購読と購読解除

functionToExecuteは実行したい機能です。

onDOMReadyは、attachDOMHandler関数にサブスクライブし、functionToExecuteをサブスクライブし、自身をサブスクライブしません。私が持っている:

onDOMReady : function(functionToExecute){ 
     subscribe(functionToExecute, this, true); 
    }, 

私はそれを実行した後に解除する機能が必要しかし:私は、次のしているとき

onDOMReady : function(functionToExecute){ 
     subscribe(this.attachDOMHandler(functionToExecute)); 
    }, 
attachDOMHandler : function(functionToExecute) { 
     unsubscribe(this.attachDOMHandler(functionToExecute)); 
     functionToExecute(); 
    } 

すべてが正常に動作します。私の計画は、機能を実行するサブタイトルの動作を持つattachDOMHandler関数を使用することでした。 前者を実行すると、Chromeコンソールに"Uncaught RangeError: Maximum call stack size exceeded"が表示されます。私はループ内で捕捉されたサブスクライブ中にattachDOMHandlerを実行し続けているので意味がある無限ループに詰まっているようです。 基本的には、パラメータ渡しで指定した関数をサブスクライブする必要があります。関数が実行されると、それは登録解除されます。 私はこの大丈夫を説明してくれることを願っています。

答えて

0

あなたは直接関数を呼び出すにしたくない:

function f() { // the function to subscribe unsubscribes itself 
       // and calls the actual function 
    unsubscribe(f); 
    functionToExecute(); 
} 

subscribe(f); 
+0

functionToExecute();パラメータが渡される必要があります。 functionToExecute =任意の関数 – Decrypter

+0

したがってf()はf(aFunction){ unsubscribe(aFunction)となります。 aFunction() } – Decrypter

+0

@Decrypter:どのような引数?議論はどこから来たのですか? – pimvdb

関連する問題