Nested zone elements problem : changes the HTML DOM and due that the tag cannot
be find
----------------------------------------------------------------------------------------
Key: TAP5-893
URL: https://issues.apache.org/jira/browse/TAP5-893
Project: Tapestry 5
Issue Type: Bug
Affects Versions: 5.1.0.5
Reporter: Deian Ivanov
Hi guys,
Here is a problem I stumbled upon today. I have to create a page with two
nested tabsets.
I put together a quick tabset component.
I found out that I cannot put two nested zones since the id parameter of the
zone must me string and that string cannot be fed from ${var} ??!
We must change that or perhaps one of those magical prefixes can do the job?
Anyways the ui of the two tabsets had to be different so created a second
tabset component with a different zone id.
However, when I play a bit with the tabsets it happens that the second(the
nested) tabset stops working and FF reports an error in Tapestry.js
function $T(element) {
var e = $(element);
var t = e._tapestry; <=== e is null
It is obvious that once the Ajax response returns a new block the ids are
changed and the ${} function doesn't work already. However
document.getElementByID() still ugly and still works and perhaps we can change
the Tapestry.js to accommodate those cases?
And in general how do we change that file? I'd go one step further to find and
suggest a solution but how do we access that file?
Cheers,
Deian
Here is the simple code:
NestedZones.tml
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
xmlns:p="tapestry:parameter">
${Name}<br/>
<hr/>
<a t:type="EventLink" event="click" zone="zz1"
t:context="literal:pp1" >#1->1</a>
<br/>
<a t:type="EventLink" event="click" zone="zz1"
t:context="literal:pp2" >#2->1</a>
<br/>
<a t:type="EventLink" event="click" zone="zz2"
t:context="literal:pp1" >#1->2</a>
<br/>
<a t:type="EventLink" event="click" zone="zz2"
t:context="literal:pp2" >#2->2</a>
<br/>
<hr/>
<t:zone t:id="zz1" style="border: 2px solid red; width: 300px;
height: 300px;">
<t:slot id="pp1"/>
</t:zone>
<t:block id="pp1">
This is block #1;
<a t:type="EventLink" event="click" zone="zz1"
t:context="literal:pp1" >#1->1</a>
<br/>
<a t:type="EventLink" event="click" zone="zz1"
t:context="literal:pp2" >#2->1</a>
<br/>
<a t:type="EventLink" event="click" zone="zz2"
t:context="literal:pp1" >#1->2</a>
<br/>
<a t:type="EventLink" event="click" zone="zz2"
t:context="literal:pp2" >#2->2</a>
<br/>
<t:zone t:id="zz2" style="border: 2px solid green;
width: 100px; height: 100px;">
<t:slot id="pp2"/>
</t:zone>
</t:block>
<t:block id="pp2">
This is block #2;
<a t:type="EventLink" event="click" zone="zz1"
t:context="literal:pp1" >#1->1</a>
<br/>
<a t:type="EventLink" event="click" zone="zz1"
t:context="literal:pp2" >#2->1</a>
<br/>
<a t:type="EventLink" event="click" zone="zz2"
t:context="literal:pp1" >#1->2</a>
<br/>
<a t:type="EventLink" event="click" zone="zz2"
t:context="literal:pp2" >#2->2</a>
<br/>
</t:block>
</html>
and the NestedZones.java
import org.apache.tapestry5.Block;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.annotations.BeforeRenderBody;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.EventLink;
import org.apache.tapestry5.ioc.annotations.Inject;
public class NestedZones {
@Inject
private ComponentResources resources;
//@Component(parameters = {"event=click"})
//private EventLink click1, click2, click3;
Object onClick(String s) {
Block toRender = null;
ComponentResources scanResources = resources;
while(scanResources != null) {
toRender = scanResources.findBlock(s);
scanResources = scanResources.getContainerResources();
// try to scan upper level
}
return toRender;
}
public String getName() {
return "Zones Test";
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.