I can’t figure out what I’m doing wrong and I could need some help, please.
I’d like to add and remove elements to an example data tiddler like:
{
"text": "no space left on device",
"number": "0815",
"colour": "red"
}
When I’m doing it with hard-coded indexes, it works:
\procedure btnact1()
<% if [{!!element1}match[]] %>
<$action-setfield $tiddler=<<dataTiddler>> $index="element1" />
<% else %>
<$action-setfield $tiddler=<<dataTiddler>> $index="element1" $value={{!!element1}} />
<% endif %>
\end btnact1
\procedure btnact2()
<% if [{!!element2}match[]] %>
<$action-setfield $tiddler=<<dataTiddler>> $index="element2" />
<% else %>
<$action-setfield $tiddler=<<dataTiddler>> $index="element2" $value={{!!element2}} />
<% endif %>
\end btnact2
<$let dataTiddler="data1">
!!Hard-coded index name
element1: <$edit-text field="element1" /> <$button actions=<<btnact1>> ><$text text={{{ [{!!element1}match[]then[clear]else[set]] }}} /></$button>
element2: <$edit-text field="element2" /> <$button actions=<<btnact2>> ><$text text={{{ [{!!element2}match[]then[clear]else[set]] }}} /></$button>
<$transclude $tiddler=<<dataTiddler>> />
</$let>
As an improvement, I tried to write a code with indexes as a parameter. But this isn’t working as expected:
\procedure btnactions(field)
<$let val={{{ [<currentTiddler>get<field>] }}} >
<% if [<currentTiddler>has:field<field>!has<field>] %>
<$action-setfield $tiddler=<<dataTiddler>> $index=<<field>> />
<% else %>
<$action-setfield $tiddler=<<dataTiddler>> $index=<<field>> $value=<<val>> />
<% endif %>
</$let>
\end btnactions
<$let dataTiddler="data1">
!!Index as a parameter
element1: <$edit-text field="element1" /> <$button actions=<<btnactions element1>> ><$text text={{{ [{!!element1}match[]then[clear]else[set]] }}} /></$button>
element2: <$edit-text field="element2" /> <$button actions=<<btnactions element2>> ><$text text={{{ [{!!element2}match[]then[clear]else[set]] }}} /></$button>
<$transclude $tiddler=<<dataTiddler>> />
</$let>
Set clears the whole data tiddler, which isn’t expected.
According to the docs, this should happen when neither $field nor $index is being set.
Adding some debug information, the variable <> has been set to the expected value.
I’m pretty sure I’m missing an important detail here - but which one is it?
