Hi all,

I'm trying to use the new zone capabilities in Tapestry 5 to dynamically update a dojo dialog box, but so far I have been unable to get it to work properly. For starters, I generate a whole bunch of actionlinks inside of a loop:

<t:loop source="crystalSource" value="currentCrystal">
<t:actionlink t:id="select" id="${currentCrystal?.id}" zone="dialogZone" context="${currentCrystal?.id}" show="show">
               ${currentCrystal?.name}
   </t:actionlink>
</t:loop>

Then I declare a dojo dialog inside of a zone:

<t:zone t:id="dialogZone">
<div id="dialog" dojo11type="dijit11.Dialog" style="overflow: auto;max-height: 300px;" title="${currentCrystal?.name}">
       // more content here
   </div>
</t:zone>

with the updated content relying on the value of currentCrystal. I have a DOM event (as suggested by previous posts) injected into the page that watches for the click on the actionlink to launch the dialog, as well as an update method:

@Component
private Zone dialogZone;

public Zone onActionFromSelect(int id) {
   this.currentCrystal = crystalDAO.attach(id);
   return dialogZone;
}

void afterRender(MarkupWriter writer) {
pageRenderSupport.addScript("Event.observe('select_7', 'click', function(event) {dijit11.byId('dialog').show();});");
}

Clicking this link launches the dialog box but it has the information for the last value of currentCrystal instead of the updated version, and the updated version appears directly on the page when I just want it in the dialog. After analyzing the problem, I found why this is happening. There are actually two dialogs declared on the page (with the same id). One is outside the zone, not being updated, but is transformed by dojo into an actual dialog:

<div id="dialog" class="dijitDialog dijitContentPane" waistate="labelledby-dialog_title" wairole="dialog" tabindex="-1" role="wairole:dialog" aaa:labelledby="dialog_title" style="overflow: auto; max-height: 300px; visibility: hidden; position: absolute; top: -9999px;" widgetid="dialog" title="">

The other "dialog" is inside the zone but dojo is not transforming it into the code above. I'm not sure whether this is because of the t-zone classes surrounding the zone or what. I tried using the zone id to call the dialog, but I can't correctly get that id from dialogZone.getClientId() when I inject the script, and dojo still won't transform the code into a dialog.

Has anyone ever tried this with Tapestry and Dojo? Would it be better to use JSON data (which I've never used)? I'm using Tapestry 5.0.11 and Dojo 1.1.0.

Thanks in advance,

Kristina

--
Kristina B. Taylor

Masters Graduate Student
Department of Computer Science
Iowa State University
Email: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to