Saturday, December 5, 2015, 12:18:17 PM, Ingo Mahnke wrote:

>
> Thank you, global variables Sounds good.
> What's with cascading?
>
> <@group name="qname" label="Header" render="collapse" id="header">
>        <@select name="kjkjk"/>
>         <@group name="def" label="SubHeader" render="collapse" id="subheader">
>             <@select name="abck"/>
>         </@group>
>         <@select name="kjkjk2"/> 
> </@group>

Well, that's one of the things why a dedicated feature would be
better, but anyway, it's still possible, even if it's a bit verbose.
For example, you could have a last_myLib_group_name:

<#macro group name>
  <#global last_myLib_group_name=myLib_group_name!>
  <#global myLib_group_name=name>
  ..
  <#nested>
  ..
  <#global myLib_group_name=last_myLib_group_name>
</#macro>

One caveat you will run into here is that for the outermost group, the
last #global assignment will restore myLib_group_name to be "" instead
of to be non-existant... so then that's something you have to consider
in @select: an empty name means you have no enclosing @group, which
should just be an error, instead of going on with an empty name.

But if I was heavily relying on something like this, I would consider
using some helper directive for this, that can manage a "stack" of
values (an List technically).

-- 
Thanks,
 Daniel Dekany


>> Gesendet: Samstag, 05. Dezember 2015 um 01:07 Uhr
>> Von: "Daniel Dekany" <[email protected]>
>> An: "Ingo Mahnke" <[email protected]>
>> Cc: [email protected]
>> Betreff: Re: Communication between directives
>>
>> Friday, December 4, 2015, 8:44:12 PM, Ingo Mahnke wrote:
>> 
>> > Hallo!
>> > I am new to freemarker and I have one question perhaps sombody can help me.
>> > I have two own directives written in Java and one Template:
>> >
>> >
>> > <@group name="qname" label="Header" render="collapse" id="header">
>> >    <@select name="kjkjk"/>
>> > </@group>
>> >
>> > When I am inside the execute method of "select" I need access to
>> > the next parent "group"-Element and I need the 
>> > value of the "name" attribute. Is this kind of communication between 
>> > directives possible?
>> 
>> There's no dedicated feature for it (there should be...), but it's
>> still possible. Both kind of directives (one implemented as an FTL
>> macro, the other in Java as TemplateDirectiveModel, I assume) can read
>> and write the so called global variables. Global variables live inside
>> the Environment object, of which a new one is created for each
>> Template.process call. In FTL, you create/modify globals as
>> <#global myVar = someValue>, and just read them as any other variable
>> (assuming it's not shadowed by another, but then you can still use
>> .globals.myVar). In Java, you can use Environment.getGlobalVariable
>> and setGlobalVariable. Of course, you should chose a sufficiently
>> unique global variable name, like myLib_group_name.
>> 
>> > Thank you!
>> > Ingo
>> 
>> -- 
>> Thanks,
>>  Daniel Dekany
>> 
>> 
>> ---
>> This email has been checked for viruses by Avast antivirus software.
>> https://www.avast.com/antivirus
>> 
>> 
>

-- 
Thanks,
 Daniel Dekany


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

Reply via email to