jQuery Mobile Page mécanisme d'actualisation

j'ai actuellement beaucoup de mal à comprendre comment JQuery mobile gère les pages rafraîchir après une mise à jour ajax.

j'ai un site de fichier unique de deux pages: un moteur de recherche.

première page est un champ de recherche. Soumettre déclenche un appel JSON et un analyseur qui met à jour la deuxième page: Résultats.

pour l'instant j'utilise: $.mobile.changePage( $('#result') ); qui fait le grand travail du champ de recherche à la page de résultat. Cependant: Si je le réutilise à partir de page de résultat pour les pages next/prev ( nouvel appel json, nouvelle parse, nouveaux noeuds ajoutés dans le DOM ); JQuery Mobile juste ne "peindre" pas les noeuds nouvellement ajoutés.

quelqu'un peut-il expliquer, s'il vous plaît l'utiliser et la distinction de 1 - $.mobile.page() 2 - $.mobile.changePage() 3 - $.mobile.refresh()

ou donnez-moi un conseil sur la façon dont je dois gérer les changements de page. merci!

21
demandé sur Matt Ball 2011-10-05 18:39:02

6 réponses

function refreshPage()
{
    jQuery.mobile.changePage(window.location.href, {
        allowSamePageTransition: true,
        transition: 'none',
        reloadPage: true
    });
}

D'ici http://scottwb.com/blog/2012/06/29/reload-the-same-page-without-blinking-on-jquery-mobile / également testé sur jQuery Mobile 1.2.0

23
répondu Sebastien GISSINGER 2012-11-20 13:57:28

s'il vous Plaît prendre un bon coup d'oeil ici: http://jquerymobile.com/test/docs/api/methods.html

$.mobile.changePage() est de passer d'une page à l'autre, et le paramètre peut être une url ou d'un objet de page. (seul le #résultat fonctionnera aussi )

$.mobile.page() n'est pas recommandé plus, veuillez utiliser la fonction .trigger( "create") , voir aussi: JQuery Mobile .la fonction page() cause boucle infinie?

Important: Créer vs d'actualisation: Une distinction importante

notez qu'il y a une différence importante entre l'événement create et la méthode refresh que certains widgets ont. L'événement create est adapté pour améliorer le markup brut qui contient un ou plusieurs widgets. La méthode de rafraîchissement que certains widgets ont devrait être utilisée sur les widgets existants (déjà améliorés) qui ont été manipulés programmatiquement et ont besoin que L'interface utilisateur soit mise à jour pour correspondre.

par exemple, si vous aviez une page où vous avez ajouté dynamiquement une nouvelle liste non ordonnée avec l'attribut data-role=listview après la création de la page, le déclenchement de create sur un élément parent de cette liste la transformerait en un widget de style listview. Si d'autres éléments de liste étaient alors ajoutés par programmation, appeler la méthode de rafraîchissement de listview ne ferait que mettre à jour ces nouveaux éléments de liste à l'état amélioré et laisserait les éléments de liste existants intacts.

$.mobile.refresh() n'existe pas, je suppose que

Si ce que vous utilisez pour vos résultats? Une listview? Ensuite, vous pouvez le mettre à jour en faisant:

$('ul').listview('refresh');

exemple: http://operationmobile.com/dont-forget-to-call-refresh-when-adding-items-to-your-jquery-mobile-list /

sinon vous pouvez faire:

$('#result').live("pageinit", function(){ // or pageshow
    // your dom manipulations here
});
16
répondu GerjanOnline 2017-05-23 12:10:13

j'ai posté que dans les forums de jQuery (j'espère qu'il peut aider):

plongeant dans le code jQM, j'ai trouvé cette solution. J'espère qu'il peut aider d'autres personnes:

pour rafraîchir une page dynamiquement modifiée:

function refreshPage(page){
    // Page refresh
    page.trigger('pagecreate');
    page.listview('refresh');
}

cela fonctionne même si vous créez de nouveaux en-têtes, navbars ou pieds de page. Je l'ai testé avec jQM 1.0.1.

7
répondu Rubén Norte 2012-02-09 13:41:05

j'ai trouvé ce fil cherchant à créer un bouton Rafraîchir page ajax avec jQuery Mobile.

@sgissinger avait la réponse la plus proche de ce que je cherchais, mais elle était dépassée.

mis à jour pour jQuery Mobile 1.4

function refreshPage() {
  jQuery.mobile.pageContainer.pagecontainer('change', window.location.href, {
    allowSamePageTransition: true,
    transition: 'none',
    reloadPage: true 
    // 'reload' parameter not working yet: //github.com/jquery/jquery-mobile/issues/7406
  });
}

// Run it with .on
$(document).on( "click", '#refresh', function() {
  refreshPage();
});
3
répondu mfregoe 2014-09-30 18:08:55

j'ai résolu ce problème en utilisant l'attribut data-cache=" false " dans la page div sur les pages que je voulais rafraîchir.

<div data-role="page" data-cache="false">
/*content goes here*/

</div>

Dans mon cas, c'était mon panier. Si un client ajoute un article à son panier, puis continue de magasiner et ajoute un autre article à son Panier, la page du panier n'affichera pas le nouvel article. Sauf s'ils rafraîchissent la page. Définir data-cache à false demande à JQM de ne pas mettre cette page en cache autant que je sache.

Espérons que cela aide les autres dans le futur.

1
répondu dherrin79 2014-01-08 22:31:48

cette réponse a fait l'affaire pour moi http://view.jquerymobile.com/master/demos/faq/injected-content-is-not-enhanced.php .

dans le contexte d'un modèle multi-pages, je modifie le contenu d'un <div id="foo">...</div> dans un handler Javascript "pageboreshow" et déclenche un rafraîchissement à la fin du script:

$(document).bind("pagebeforeshow", function(event,pdata) {
  var parsedUrl = $.mobile.path.parseUrl( location.href );
  switch ( parsedUrl.hash ) {
    case "#p_02":
      ... some modifications of the content of the <div> here ...
      $("#foo").trigger("create");
    break;
  }
});
0
répondu FredP 2013-04-22 14:49:10