0

プッシャーを使用してJavaScriptでモジュラーアプリケーションを作成しようとしています。異なるモジュールが同じプッシャーイベントにバインドする必要があり、そのイベントが別のイベントにネストされる場合があります。さらに、これらのモジュールは、ユーザーによってトリガーされたDOMイベントに応じて異なる時間にロードされます。

したがって、1つのモジュールに次のようなコードがある場合

env.pusher.connection.bind('connected', function() { 
    env.my_channel.bind('private_message',function(data){ ... }
}

private_messageそして、別のモジュールがやって来て、同じイベントを聞きたいと思っています。同じコードを書くとどうなりますか?最初のバインドが上書きされます。

私が探しているのは、ある種のリスナーを実装する方法であり、おそらくチャネルイベントからリスナーを削除するオプションがあります。

4

1 に答える 1

0

私は自分で解決策を考えました。次の手順で構成されます。

  • プッシャーイベントの辞書を保持する
  • プッシャーイベントを利用するすべてのモジュールは、最初にディクショナリを検索してそのイベントが存在するかどうかを確認し、存在しない場合は、バインドを初めて作成するコードを記述してディクショナリに追加する必要があります。

  • モジュールが初めてバインドを作成するときは、カスタムイベントをトリガーし、プッシャーイベントの完了時にプッシャーが送信するデータをモジュールに渡す必要があります。

  • プッシャーイベントを利用するすべてのモジュールは、プッシャーイベントがトリガーされたときにトリガーされるカスタムイベントにハンドラーを追加する必要があります

それを理解するのが難しいように思われる場合は、私の質問のコードを書き直したモジュール内のコードを次に示します(jQueryは簡潔で、カスタムイベントが既に実装されているため、jQueryを使用しました)。

if (typeof(env.pusher_events['my_channel']['private_message']) == 'undefined'){
    env.pusher_events['my_channel']['private_message'] = true;

    // 'pusher-connected' is defined in another module
    // this module depends on that event but for brevity
    // I'm not defining the 'connected' event here

    $(document).on('pusher-connected', 'body', function(){
        env.my_channel.bind('private_message', function(data){
            $('body').trigger('pusher-my_channel-private_message', data);
        })
    })
}

$(document).on('pusher-my_channel-private_message', 'body', function(data){
    // do something useful with the data
}

これに関するフィードバックを受け取りたい(欠点など)

于 2012-07-06T11:31:17.813 に答える