IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Rafraichir un div (ou contentPane ?) [Dojo]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut Rafraichir un div (ou contentPane ?)
    Bonjour à tous,
    J'ai un div que j'aimerais rafraichir mais je ne sais pas comment faire.

    Je l'ai passé en dijit.layout.ContentPane, et j'ai créé un bouton appelant une fonction JS (Dojo) pour le rafraichir. Mais problème, je remarque que c'est l'ensemble de la page qui est ré affiché dans le div que je viens de rafraichir, et non juste son contenu initial ...
    Comment faire?

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function refreshDiv(){
                    var toto = dijit.byId("div3");
                    var foo = toto.refresh();
                }
     
    // D'autres div...
     
    <div data-dojo-type="dijit.layout.ContentPane" id="div3" style="border: 1px green solid;">
                un message
            </div>

  2. #2
    Membre confirmé
    Homme Profil pro
    Apprenti Informatique
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Par défaut
    cherche du coté de dojo.xhrGet ensuite sur le onLoad(content) tu supprimes et recrée ta ContentPane avec ton nouveau content ça devrait marcher

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Bonjour,
    pourrais tu etre un peu plus précis sur la réalisation de ce que tu proposes stp ?
    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Apprenti Informatique
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Par défaut
    Salut,

    Je viens de te donner le mode opératoire.

    Dans ta fonction refreshDiv() tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    xhrGet({
    url:"monPhpQuiMeDonneLeContent.php",
    onLoad:function(content){
    // ici tu fais un dijit.byId('div3').domNode.innerHTML=content
    // si ça ne marche pas tu fais un truc du genre destroyRecursive(true) sur ton ContentPane (le booléen te permet de conserver le domNode) et tu recrées ton ContentPane sur celui ci
    },
    onError://ta fonction de traitement
    });
    Il faut essayer et réessayer encore. L'API Dojo est ton amie

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    En fait mon problème est que je ne voudrais pas passer par l'insertion d'un fichier externe (ton "url'), et ne pas "remplacer" le contenu de mon contentPane (via un innerHTML) .. Ouais je sais j'en demande beaucoup

    Je ne sais pas si tu connais struts2, mais j'ai par exemple ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <s:div data-dojo-type="dijit.layout.ContentPane">
            <s:property value="variableJava" />
    </s:div>
    Avec par exemple, au 1er chargement de ma page : variableJava = "toto"
    Puis j'appuie sur un bouton qui va faire les actions suivantes :
    - Modifier la valeur de "variableJava" en "tutu" (dans ma classe Java), via une Action Struts
    - Faire un refresh de mon contentPane (ou un div si on peut le faire avec) => le contenu "pur" (j'entends par la, le code) ne changera pas, mais la partie interprétée, coté client, affichera "tutu" au lieu de "toto".

    Je ne sais pas si c'est assez clair comme explication

  6. #6
    Membre confirmé
    Homme Profil pro
    Apprenti Informatique
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Par défaut
    Si je comprends bien tu veux que le serveur envoie une mise à jour au client spontanément ? De ce que je connais ce n'est pas encore possible mais ça va le devenir avec les socket HTML5 ...

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 97
    Par défaut
    Citation Envoyé par cfried Voir le message
    cherche du coté de dojo.xhrGet ensuite sur le onLoad(content) tu supprimes et recrée ta ContentPane avec ton nouveau content ça devrait marcher
    J'ai finalement réussi, en utilisant un peu ce principe.
    J'ai une jsp principale (index.jsp) dans laquelle je vais inclure mes jsp "filles" en ajax. Et donc si je veux actualiser l'une d'entre elle, je détruits tous les widgets qu'elle contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function destroyWidgets(div){
        dojo.forEach(dijit.findWidgets(dojo.byId(div)), function(w) {
            w.destroyRecursive();
        });
    }
    Puis je charge ma page via XHRget:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function populateDiv(method, url, handleAs, divId, contentId, isHtmlReturned){
    dojo.xhr(method,{
                url: url, 
                handleAs : handleAs,
                preventCache: true,
                content:{Id:contentId},
                timeout: 20000,
                load: function(newContent) {
                    dojo.byId(divId).innerHTML = newContent;
                    dojo.parser.parse(divId); // Permet de garder Dojo
                },
                error: function(response, args) {
                    var errNum = args.xhr.status; // On récupère le numéro d'erreur
                    dojo.byId(divId).innerHTML=response;
     
                    switch (errNum) {
                        case 404:
                            message = "The requested page was not found";
                            break;
                        case 500:
                            message = "The server reported an error.";
                            break;
                        case 407:
                            message = "You need to authenticate with a proxy.";
                            break;
                        default:
                            message = "Unknown error. : ";
                    }
                }
            },isHtmlReturned);
    }
    Et le tour est joué

  8. #8
    Membre confirmé
    Homme Profil pro
    Apprenti Informatique
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Par défaut
    Oui je pense que c'était le plus évident bien joué

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. rafraichir une div en ajax
    Par devmassi dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 22/02/2008, 16h10
  2. Rafraichir un div sans perdre les données du formulaire
    Par Krustig dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/01/2008, 23h32
  3. [Javascript] Rafraichir un div
    Par drzoidberg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2007, 03h02
  4. [AJAX] rafraichir une div !
    Par omantherasta dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/12/2006, 17h35
  5. [Javascript] Rafraichir un div...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2006, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo