tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Deian Ivanov (JIRA)" <j...@apache.org>
Subject [jira] Created: (TAP5-893) Nested zone elements problem : changes the HTML DOM and due that the tag cannot be find
Date Wed, 14 Oct 2009 19:34:31 GMT
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.


Mime
View raw message