\define x(id) {{data/$id$##name}}
<$macrocall $name=x id={{!!id}}/>\define fetch(attr) {{data/{{!!id}}##$attr$}}
...
Name: <<fetch "name">>\define fetch(attr) {{data/{{!!id}}##$attr$}}
\define fetch-inner(id,attr) {{data/$id$##$attr$}}
\define fetch(attr) <$macrocall name=fetch id={{!!id}} attr="$attr$">>
<<fetch "name">>\define fetch(attr, id:{{!!id}}) {{data/$id$##$attr$}}
<<fetch "name">>Another option is to use the transclude widget instead of the short forms, which are after all compact ways of transcluding. The transclude widget allows tiddler and field parameters and can be read without deciphering curly braces $parms$ etc.. Ie no concatenation is necessary.
I see now that when we find ourselves concatenating strings just to make them work using short hand perhaps we should just use long hand and avoid concatenating all together.
With all the string operators now in filters using the triple braces to wrap a filter is another way to concatenate if necessary.
Regards
Tony
<$transclude tiddler={{{ [[data/]addsuffix{!!id}] }}} index="name" />\define fetch(key)
<$transclude tiddler={{{ [[data/]addsuffix{!!key}] }}} index="$key$" />
\end<<fetch name>>Yes, thanks for expanding and giving examples. That's what I mean by;
With all the string operators now in filters using the triple braces to wrap a filter is another way to concatenate if necessary.
yony