私は問題に対してエレガントで効率的な解決策を探しています:イベントがトリガーされた関数の実行を続行するために、イベントが処理されるのを待っています。
私はこのwebappに多くのコンポーネントがあります。
1つの主なコンポーネントには、時間と共に成長/進化する多くの機能が含まれています。
このメインコンポーネントには、実際に行う前に、アドオンが聴くことができるように、イベントbeforedoがトリガーされるという機能があります。アドオンコード
$doc.on('beforedo',function(e) {
//do before addon stuff
}
で
dostg : function() {
$doc.trigger('beforedo');
//do stuff but after event is handled by the addons ?
}
今、それらのものをやってはある程度の処理時間がかかるAjaxのリクエストか何かを含むことができる前に。
私はajaxリクエストのカウンタをインクリメントして、それがnilになるのを待つことができますが、私が望むのは、すべてのハンドラが自分の仕事を終えるのを待っているソリューションだからです。これらのアドオンハンドラで行われます)。
これを行うにはいくつかの奇跡の解決策がありますか、このような状況でイベントを忘れて別の方法(配列の新しい機能を追加するaddons関数の配列)に行く必要がありますか?
あなたの専門知識をお寄せいただきありがとうございます。
------- BOUNTY
& @Sergiu Paraschivを@xbonezに謝罪、私は編集私は報奨金を提供して前に、今使用している溶液で質問を持っている必要があります(ソリューションFOLLOWING EDIT私は完全に満足していないので、恩恵を受けます)。私はアドオンbeforedoで何かをする必要がない場合でも、私はまだアドオンの少なくとも一方で(addonreadyトリガするためのハンドラを追加する必要があるため
//app
var $doc = $(document.body);
//component
$doc.on({
wait: function (e) { ++$doc.component.handleinprogress; },
addonready: function() {
--$doc.component.handleinprogress;
if ($doc.component.handleinprogress==0) $doc.trigger('readyfordo');
},
readyfordo: function() {
//do stuff after event has been handled by the addons
}
});
$doc.component = {
handleinprogress: 0,
dostg: function() {
$doc.component.handleinprogress = 0;
$doc.trigger('beforedo');
}
};
//in component addon files
$doc.on('beforedo', function (e) {
$doc.trigger('wait');
//do addon stuff
$doc.trigger("addonready");
}
私は、このソリューションに満足していませんよ - >そのため、私は、readyfordoがトリガされるかどうかを気にせずにコンポーネントからaddonを追加/削除する柔軟性を失うか、すべてのアドオンにハンドラを含める必要があります。