[XSL]Problème de portée des variables
Salut à tous
je code actuellement un template pour des elements de menu recursifs,
Je souhaite définir un evenement onClick a tous les MenuItem ayant un sous MenuItem pour qu'il affiche(ou cache) les sous elements
Voici le code que j'utilise actuellement (PAs forcement très propre je ne fais du XML que depuis Hier)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <xsl:template match="MenuItem">
<xsl:variable name="OnClickMethod"/>
<xsl:choose>
<xsl:when test="count(child::MenuItem)>0">
<SPAN id="{concat(ID,'_plus')}" name="{concat(ID,'_plus')}" OnClick="afficher_cacher('Sub_{ID}');">+</SPAN>
<xsl:variable name="tempstring">afficher_cacher("Sub_</xsl:variable>
<xsl:variable name="tempstring2" select ="concat($tempstring,ID)"/>
<xsl:variable name="tempstring3">');return;</xsl:variable>
<xsl:variable name="OnClickMethod" select="concat($tempstring2,$tempstring3)"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="OnClickMethod"></xsl:variable>
</xsl:otherwise>
</xsl:choose>
<a href="{Action}" OnClick="{$OnClickMethod}">
<xsl:choose>
<xsl:when test="count(ancestor::*)=1">
<SPAN STYLE="FONT-WEIGHT: bold; FONT-SIZE: 14pt; COLOR: blue">
<xsl:value-of select="Libelle"/>
</SPAN>
</xsl:when>
<xsl:when test="count(ancestor::*)=2">
<SPAN STYLE="FONT-WEIGHT: bold; FONT-SIZE: 12pt; COLOR: lightblue">
<xsl:value-of select="Libelle"/>
</SPAN>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Libelle"/>
</xsl:otherwise>
</xsl:choose>
</a>
<BR/>
<UL>
<DIV id="Sub_{ID}" style="display:block">
<xsl:apply-templates select="MenuItem"/>
</DIV>
</UL>
</xsl:template> |
Lorsque j'utilise ce template pour afficher mon XML, le navigateur me dit:
Citation:
Impossible de définir deux fois la variable ou le paramètre 'OnClickMethod' au sein du même modèle.
Lorsque j'enlève la ligne
Code:
<xsl:variable name="OnClickMethod"/>
Je n'ai plus le message d'erreur mais un autre qui m'indique:
Citation:
Impossible de résoudre une référence à une variable ou un paramètre « OnClickMethod ». La variable ou le paramètre ne sont peut être pas définis ou sont absents de la portée
Comment puis faire pour définir au sein de mon xsl:choose une variable à portee globale? Ou comment définir une variable globale sans lui affecter tout de suite une valeur?
J'ai déjà jeté un oeil au post http://www.developpez.net/forums/viewtopic.php?t=243086 et les references associées mais je n'ai rien trouvé de convaincant. :(
Quelqu'un aurait il une :idea: de ce que pourrais utiliser pour palier a ce probleme?
MErci par avance.
Re: [XSL]Problème de portée des variables
Citation:
Envoyé par djulesp
Comment puis faire pour définir au sein de mon xsl:choose une variable à portee globale? Ou comment définir une variable globale sans lui affecter tout de suite une valeur?
J'ai déjà jeté un oeil au post
http://www.developpez.net/forums/viewtopic.php?t=243086 et les references associées mais je n'ai rien trouvé de convaincant. :(
Sans doute car ce qu tu demandes est impossible.On ne peut pas redefinir une variable xslt ,et elle est obligatoirement locale au noeud ou elle est spécifiée.
Je croyais pourtant l'avoir ecris noir sur blanc.