2011-06-30 15 views
0

ディレクトリ構造に基づいてリストを作成するスクリプトがあります。 WebDAVリソースから読み取り、ファイルごとにロックを検出し、ノードおよびクラスを追加して、ロックされている場合にリスト項目のクラスを含む一連のネストされたリストとしてこの構造を表示します。非同期再帰アクティビティがいつ終了したかを知るには?

すべてがうまく機能するように、私が今やりたいことは、作成されたリストノードに機能を割り当てることです。

リスト項目が非同期コールバックの範囲内で作成されるため、この機能を追加することができましたが、一連の潜在的な再帰的非同期アクティビティ(XレベルYリソースを含むディレクトリ)を終了し、その時点で作成されたノードのグループ全体に対して安全にアクションを実行します。

// Add functionality to items meeting the CSS selector criteria 
Y.all('#select_projects_list li.file:not(#select_projects_list li.locked)').on('click', function(e){ 
    // do stuff with 'this' 
}); 

それはどこだろう:私はYUI3を使用していますし、彼らのような便利のすべての種類を持っているので、代わりに先に行くと発見されたリソースの各非同期コールバック時に機能を追加することで、ある

私が尋ねる理由に、上記のようにすれば、何百ものリソースになる可能性があるため、各非同期コールバック内で同様の機能を繰り返すより効率的かもしれません。

擬似コードソリューション、アイデアとアプローチが評価されました。

歓声。

答えて

1

イベント委任を使用します。一般に、Y.all(...).on(...)を使用していると思われる場合は、イベント委任を使用しているはずです。

これを試してみてください:

Y.one('#select_projects_list').delegate('click', handleClick, 'li.file:not(.locked)'); 

​​は、クラス「ファイル」を持ち、クラスが「ロック」はありません#select_projects_list内部の任意のリーに起こるすべてのクリックのために呼び出されます。後でこれらのノードを追加、削除、または変更する場合は、それ以上イベントのサブスクリプションを変更する必要はありません。 1つのデリゲートリスナーが行います。 handleClickコールバック内でthisがliノードになります。

http://developer.yahoo.com/yui/3/event/#delegate

+0

beaut。ノードが存在する前に機能を委任できることは間違いなく魅力的でした。 – danjah

関連する問題