2017-09-26 29 views
0

私はpjaxの初心者ですが、私がそれを実装する方法が正しいかどうかはわかりません。私はたくさんのjqueryを持つ古いプロジェクトを持っていました。ちょっと整理するために、私が従った方法は、各ページの本文に一意のIDを割り当てることでした。<body id="Login">私のレイアウトでは、私はコードを書かれていた:今、各ページの読み込み時に、コードのみがページに必要な

var Login = (function() { 
    var funct = {}; 

    //any variables, only required on this page 

    funct.someFunction = function(){ 
     //code 
    } 

    funct.init = function(){ 
     //all the functions that are to be called on page load 
    } 
    return funct; 

})(); 

:ページの特定のjqueryのために

var page = $('body').attr('id'); 
if(page !== '' && typeof self[page] != 'undefined') 
    self[page].init(); 

を、私はこのような何かを書いていました実行される。しかし、私は今、pjaxリンクへのリンクのほとんどを作っています。だから、ログインページに、リンクがある:

<a data-pjax href="/register">Register</a> 

とレイアウトは、コードを持っています

$(document).pjax('a[data-pjax]', '#pjax-container'); 

これは、レジスタページを開きます。しかし、ボディIDはまだ"ログイン"だったので、Register.init()をロードしませんでした。

どのようにしてこれを取得できますか?

私はpjaxを使用したことがないが、ページの変更はあなたが event.targetで何かを行うことができるはず

$(document).on('pjax:end', function(event) { 
    // 
}) 

完了した後に、そのマニュアルに従って、あなたはいくつかのコードを実行するためにイベントリスナーを追加することができ、うまくいけばべき

答えて

1

新しいページが何であるかを把握するために、クリックされたリンクになります。

+0

返信いただきありがとうございます。私は似たようなやり方をしました。私は、すべてのpjaxリンクにデータロード属性を追加しました。これは、トラッページページの本体IDを受け取り、それに応じて関連するJSをロードします。しかし、それは私の問題を解決し、ページはpjaxとnon-pjaxモードの両方で動作するようになりましたが、私はそれが最も洗練された解決策ではないと感じています。その答えを得るために私の質問をCodeReviewに移すかもしれません。ご協力いただきありがとうございます。 – gentrobot

+0

P .:私が「最もエレガントではない」と言うとき、それは私のアプローチと私のコードです。あなたが提案した解決策とは関係ありません。 :) – gentrobot

関連する問題