Pregunta

Estoy tratando de descubrir cómo actualizar una zona de tapiz utilizando un "contexto" dinámico impulsado por el lado del cliente.Soy bastante nuevo en el mundo de los tapices y por ahora me quedo con la versión 5.0.

La razón principal para hacer esto es reutilizar otro componente de tapiz como hijo de un diálogo jquery, sin tener que reescribir el componente de tapiz.

Un problema es que la zona y cualquier elemento que la controle terminan dentro de un cuadro de diálogo jquery.$jquery(...).dailog() tiende a cortar/pegar el html de un elemento en otra ubicación, lo que podría estar rompiendo algo.Sin embargo, no he podido hacer que todo funcione ni siquiera fuera de un cuadro de diálogo de jquery.

Esto es lo que intenté y no pareció funcionar (tal vez lo hice mal):

  • Cree un enlace de evento vinculado a la zona y modifique el href.Tapestry parece utilizar una variable almacenada en algún lugar suspiro.
  • Cree un t:form vinculado a la zona.Cuando intento actualizarlo, puedo decir que está ocurriendo un evento del lado del servidor, pero la zona del tapiz no cambia ni se actualiza como debería.La zona está ubicada afuera y separada del formulario.Ni siquiera veo el típico destello amarillo cuando se actualiza una zona.
¿Fue útil?

Solución

Encontré un código de ejemplo que prácticamente resuelve mi problema;No había funcionado, pero mientras escribía la pregunta aquí en SO, vi lo que estaba mal.Como es probable que alguien más también haya tenido este problema, publico una respuesta aquí:

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

Para resolver el problema con jquery .dialog() moviendo html, también tengo que copiar y conservar el administrador de zona de esta manera:(donde $J(...) es mi abreviatura de jquery, para evitar conflictos de prototipos)

    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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top