Question

J'essaie de comprendre comment mettre à jour une zone de tapisserie à l'aide d'un "contexte" dynamique côté client.Je suis assez nouveau dans le domaine de la tapisserie et je suis bloqué avec la version 5.0 pour le moment.

La raison principale est de réutiliser un autre composant de tapisserie en tant qu'enfant d'une boîte de dialogue jquery, sans avoir à réécrire le composant de tapisserie.

Un problème est que la zone et tous les éléments qui la contrôlent se retrouvent dans une boîte de dialogue jquery.$jquery(...).dailog() a tendance à couper/coller le code HTML d'un élément à un autre emplacement, ce qui pourrait casser quelque chose.Cependant, je n'ai pas réussi à faire fonctionner les choses même en dehors d'une boîte de dialogue jquery.

Voici ce que j'ai essayé, qui ne semble pas fonctionner (peut-être que je l'ai mal fait) :

  • Créez un lien d'événement lié à la zone et modifiez le href.Tapestry semble utiliser une variable stockée quelque part à la place soupir.
  • Créez un t:form lié à la zone.Lorsque j'essaie de le mettre à jour, je peux dire qu'un événement côté serveur se produit, mais la zone de tapisserie ne change ni ne se met à jour comme elle le devrait.La zone est située à l'extérieur et séparée de la forme.Je ne vois même pas le flash jaune typique lorsqu'une zone est mise à jour.
Était-ce utile?

La solution

J'ai trouvé un exemple de code qui résout à peu près mon problème ;cela n'avait pas fonctionné, mais en tapant la question ici sur SO, j'ai vu ce qui n'allait pas.Puisqu'il est probable que quelqu'un d'autre ait également rencontré ce problème, je poste une réponse ici :

        var zoneId = "itemZone"; // tml was <t:zone id="itemZone"...>
        var zoneObject = Tapestry.findZoneManagerForZone(zoneId);
        zoneObject.updateFromURL(url);

Pour résoudre le problème du déplacement du HTML par jquery .dialog(), je dois également copier et conserver le gestionnaire de zones comme ceci :(où $J(...) est mon abréviation pour jquery, pour éviter les conflits de prototypes)

    prototypeStorageObj = $T("itemZone");
    zoneManager = prototypeStorageObj.zoneManager;
    // jquery stuff that kills the prototype data storage.
    emailForm = $J("#myDialog");
    emailForm.dialog({ autoOpen: false, modal:true });
    emailForm.dialog('open');
    // restore the zone manager so the zone works again:
    $T("itemZone").zoneManager = zoneManager;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top