7
votes

Comment utiliser la pageInit correctement?

J'ai un seul fichier pour chaque page et j'essaie de mettre en œuvre le gestionnaire d'événements de page sur chaque page (je pense que ce qui appartient strictement à une page, devrait être déclaré là), comme indiqué ci-dessous:

<body>
    <div id="myPage" data-role="page">
        <!-- Content here -->
        <script type="text/javascript">
            $("#myPage").live('pageinit', function() {
                // do something here...
            });
        </script>
    </div>
</body>


0 commentaires

5 Réponses :


2
votes

Je pense que c'est probablement préférable de déplacer votre code JavaScript dans un autre fichier comme pendant que vous naviguez autour de votre site JQuery Mobile May Nettoyage (Lire: Supprimer de DOM) que MyPage pageInit .

C'est essentiellement pourquoi ils suggèrent d'utiliser le ou ou sur . Cependant, il tombe si vous incluez le code de liaison sur la page;)

Toutefois, si vous insistez sur votre code placé sur une page par page que d'utiliser lid au lieu de live . .

ref: http://jquerymobile.com/demos/1.0/ Documents / pages / page-cache.html

JQuery Mobile a donc un mécanisme simple pour garder le Dom Nardy. Chaque fois qu'elle charge une page via AJAX, JQuery Mobile Flags la page à supprimer de la DOM lorsque vous naviguez à l'abri ultérieurement (techniquement, sur l'événement de page).


4 commentaires

Et où devrais-je appeler le fichier JavaScript?


Dans un fichier JS commun qui est chargé dans le cadre de votre tête?


Et ce fichier s'appellera une seule fois, car JqueryMobile n'exécutera pas le fichier dans l'en-tête, car l'en-tête n'est demandé qu'une seule fois, non?


également bon à utiliser $ (document) .Delegate ('# inspecter-page', 'pageInit', fonction () {}); au lieu de $ (document) .on ( 'PageImit'); Le plus tard semble tirer plus d'une fois



0
votes

Une solution de contournement rapide que j'ai utilisée est de déclarer une variable contenant la fonction de gestionnaire.

$( "#myPage" ).die( handler ).live( handler );


0 commentaires

6
votes

Je résolvez le problème en faisant passer le nom de l'événement, dans ce cas la "pageInit" au lieu du gestionnaire.

<script defer="defer" type="text/javascript">

var supplier = null;
$("#pageID").die("pageinit"); //<--- this is the fix
$("#pageID").live("pageinit", function(event){

console.log("initialized - @(ViewBag.ID)");
supplier = new Tradie.Supplier();

supplier.Initialize("@(ViewBag.ID)");


1 commentaires

C'est une vraie douleur dans le cul que cela m'a fallu 2 jours d'enfer pour trouver ceci. Espérons que je suis dans le clair ...



0
votes
$("#page1").live("pageinit", function () {
    alert('pageinit');
    $("#page1").die("pageinit"); //<--- prevent from firing twice on refresh
});

0 commentaires

2
votes

Je suis sûr qu'ils recommandent de recommander une page de liaison au document à l'aide de (). E.G.

$(document).on ('pageinit', '#myPage', function (event) {


0 commentaires