0

コード例:

var Events = $({});

Events.on('myCustomEvent', function(){ console.log('myCustomEvent 1') })

Events.trigger('myCustomEvent'); // I want notify the previous binds and all binds in future

$.ajax({...}).success(function(res){
    Events.on('myCustomEvent', function(){ console.log('myCustomEvent 2') })
});

// when ajax or other long process will be finished 'myCustomEvent' must be fired

'myCustomEvent 1'は、トリガーが呼び出される前にバインドされ、'myCustomEvent2'もトリガーされる必要があるために出力されます。

jQueryのソリューションはありますか?

4

2 に答える 2

0

必要なのは、pub / subシステム、またはObserverパターンを実装するコードであるため、それほど多くのイベントではないように見えます。これらの実装のほとんどには、メッセージが公開された後、サブスクライバーにさかのぼって電話をかける機能がありません。私はそれを行いましたが、システムを使用している人は誰でもメッセージが何度も公開される可能性があることを知っていることに注意する必要があります。残念ながら、コードは雇用主が所有しているため、共有できません。

「JavaScriptのオブザーバーパターン」または「JavaScriptのpubsub」を検索するだけで、優れたライブラリが得られます。通常、これらは「トピック」のハッシュを、そのトピックが公開されたときに呼び出される関数の配列に使用します。秘訣は、publishが呼び出されたときの履歴も保持することです。誰かがすでに公開されているトピックを購読している場合は、そのトピックを再公開します。

うまくいけば、それはあなたが始めるのに十分です。

于 2012-05-24T20:50:47.427 に答える
0

解決策は$.Callbacksだと思います

Callbacks.highlight = $.Callbacks('memory')

// ComponentB
$(window).hashchange(function(){

    $.ajax({ /* load items of #ListB */ }).success(function(data){

        /* append items to dom */

        if (/listA=123/.test(location.hash))
            Callbacks.highlight.fire();
    })

    $('#ListB').on('click', 'a', function(){ /* highlight the same in #ListA by alg2 */ })
})

// ComponentA
$(window).hashchange(function(){

    $.ajax({ /* load items of #ListA */ }).success(function(data){

        /* append items to dom */
        Callbacks.highlight.add( /* highlight item */ )
    })

    $('#ListA').on('click', 'a', function(){ /* highlight the same in #ListB by alg1 */ })
})
于 2012-05-26T16:46:14.223 に答える