0

私は JS ファイルが jQuery イベントを介して相互に通信する必要があり、それはかなり簡単だと思っていましたが、助けが必要だと思う問題に遭遇しました。

基本的に、ID が「#nav-controller」の DOM 要素を使用して、2 つの JS ファイル間のメッセンジャーとして機能します。最初のファイル (最初に実行するファイルであることを確認しました) は、次の 2 つのカスタム イベントをリッスンします。

function external_command_listener () {
    // Click Handling
    $( '#nav-controller' ).on( 'clickhandler' , function ( e , param ) {
        alert ("registering clicks to: " + param );
        register_qs_click_handler ( param );
    });
    // Menu Control handling
    $( '#nav-controller' ).on( 'controlframework' , function ( e , param ) {
        alert ('registering menu handling to: ' + param );
        register_qs_control_framework ( param );
    });
}

これでセットアップは完了です。2 番目のファイルは、trigger() を使用して、最初のファイルの関数を効果的に呼び出します。コードは次のとおりです。

function Initialise_Navigation () {
    navTemplate = Template_File_Name ( 'navigation' );
    $.get( navTemplate , function (data) {
        $( '#page-nav-system' ).html(data);
        $( '#nav-controller' ).trigger( 'clickhandler' , ['#application li'] ); // register a click handler
        $( '#nav-controller' ).trigger( 'controlframework' , ['.quicksand-cntrl'] ); // register a control framework

Chrome のデバッガーを使用して、Initialise_Navigation() 関数を実行し、両方のトリガー ステートメントを実行しているように見えますが、最初のファイルでセットアップされたリスナーがアクティブにならないことをテストしました。一般的な「クリック」イベントでも試してみましたが、それも失敗しました。

何か案は?私はロープの終わりにいます。

4

1 に答える 1

0

私はこれを単純化しすぎているかもしれませんが、なぜ 2 つの JSファイル間で「通信」を実装する必要があるのでしょうか。それらはある種のOOパターンにありますか?それらは異なるスコープで実行されますか?

いずれにせよ、イベント ハンドラーをオブジェクト (またはDOM ツリーにあるdocumentその他の包含親オブジェクト) に単純にバインドできます。

// Even binding
$('#parentalElement').bind('customEventString', function(event, params... ) {
  // Handle the event
});

// Trigger 
$('#foo').trigger('custom', params );
于 2012-05-05T17:18:53.310 に答える