Si,
Yes you are very close, I did not think about keeping the key value in the
datatiddler json rather I would have used
value={{{ [{myData!!lastkey}add[1]] }}}
and set myData!!lastkey
No need to have to look into the data to get the last key
Its critical that the button that creates the data item in the dattatiddler
is the same one that saves the last key
Psudo code
Calculate newkey number from datatidder!!lastkey
Button to create new record
Action Create new record actions with key = newkey number
Action Save newkey number in lastkey field datatidder!!lastkey
end button
To set the initial value for the key to 1 (when no entry exists) try this
<$set name=new-key value=value={{{ [{myData!!lastkey}add[1]] }}}
emptyValue="1">
above pseudo code
</$set>
Regards
Tony
On Friday, November 15, 2019 at 8:18:26 AM UTC+11, si wrote:
>
> Tony
>
> I'm not sure if I am understanding your suggestion correctly - do you mean
> something like this?:
>
> <$edit-text tiddler="$:/state/enter-text" />
>
> <$button>
> <$action-setfield $tiddler=myData $index="Key Number" $value={{{
> [{myData##Key Number}add[1]] }}} />
> <$wikify name=title-value text="<<currentTiddler>> [{{myData##Key
> Number}}]/Title" >
> ...
> <$action-setfield $tiddler=myData $index=<<title-value>> $value=<
> <currentTiddler>>/>
> ...
> </$button>
>
> Which gives the example result:
>
> {
> "Key Number": 3,
> "json test [1]": {
> "Title": "json test",
> "Text": "Here is some text.",
> "Date": "21:14, 14th November 2019"
> },
> "json test [2]": {
> "Title": "json test",
> "Text": "Blah",
> "Date": "21:14, 14th November 2019"
> }
> }
>
>
> In my example I added an extra button to save an initial value of 1 for
> "Key Number". I can't think of a way to build this into my main button for
> creating data entries (without an initial value the first entry will be
> "json test []" then "json test [1]" etc...)?
>
> On Wednesday, November 13, 2019 at 11:32:54 PM UTC, TonyM wrote:
>>
>> Mark perhaps each time you add a tiddler to the data tiddler you
>> increment a key number and use it as the key, even in a field on the data
>> tiddler
>>
>> If you delete a tiddler it will just be a missing key.
>>
>> If you use a button to add new tiddlers you can make use of the button to
>> trigger an event to add one with the current operators (use triple curly
>> braces) to the key/index number and set the key number field to the new
>> value.
>>
>> Tony
>>
>> On Thursday, November 14, 2019 at 7:31:18 AM UTC+11, Mark S. wrote:
>>>
>>> Joshua's site says that the improved "indexes" filter will return all
>>> paths. So
>>>
>>> IF you have the same number of entries for each nested group, then you
>>> can divide by that number and add one to get the next number in the
>>> sequence:
>>>
>>> <$list filter="[[myData]indexes[]count[]divide[2]add[1]]"
>>> variable="nextnum">
>>> ... do stuff
>>> </$list>
>>>
>>> This example assumes 2 items per group.
>>>
>>> The problem with this approach is that you might, at some time, delete
>>> an entry. So this approach only works if you never delete entries.
>>>
>>> A more advanced approach would require you to add a "number" field to
>>> each nested group. If you had such an index, then you could write
>>> a macro that would run through the entries, find the highest value and
>>> add one.
>>>
>>> hth
>>>
>>> On Wednesday, November 13, 2019 at 11:51:24 AM UTC-8, si wrote:
>>>
>>>> Thanks for your help, that does the trick.
>>>>
>>>> In order to get a new numerical value for each level every time I press
>>>> the button I have used the MathyThing
>>>> <http://inmysocks.tiddlyspot.com/#MathyThing%20-%20action-increment%20Widget>
>>>>
>>>> plugin to increment the number in a field called "number". It's a little
>>>> tenuous though because it will be easy in my use case to accidentally
>>>> overwrite this number.
>>>>
>>>> Do you know of a better way to this? e.g. a way to count the number of
>>>> bottom level entries in the JSONTiddler and add 1 or something?
>>>>
>>>> I've attached an example of what I have done.
>>>>
>>>> <$edit-text tiddler="$:/state/enter-text"/>
>>>>
>>>> <$button>
>>>> <$wikify name=title-value text="<<currentTiddler>>
>>>> [{{!!number}}]/Title" >
>>>> <$wikify name=text-value text="<<currentTiddler>> [{{!!number}}]/Text" >
>>>> <$wikify name=date-value text="<<currentTiddler>> [{{!!number}}]/Date" >
>>>> <$action-increment $tiddler=<<currentTiddler>> $field=number
>>>> $initial="0" $increment="1"/>
>>>> <$action-setfield $tiddler=myData $index=<<title-value>>
>>>> $value=<<currentTiddler>>/>
>>>> <$action-setfield $tiddler=myData $index=<<text-value>>
>>>> $value={{$:/state/enter-text}}/>
>>>> <$action-setfield $tiddler=myData $index=<<date-value>> $value=<<now>>/>
>>>> </$wikify>
>>>> </$wikify>
>>>> </$wikify>
>>>> Save
>>>> </$button>
>>>>
>>>> Thanks again for your help.
>>>>
>>>> On Sunday, November 10, 2019 at 10:24:34 PM UTC, Mark S. wrote:
>>>>>
>>>>> Since you're writing to the same indexes on the same tiddler, it
>>>>> overwrites them.
>>>>>
>>>>> There's no tools in TW for handling nested data tidders, but you can
>>>>> use
>>>>>
>>>>> Joshua Fontany's JSON Mangler:
>>>>>
>>>>> https://joshuafontany.github.io/TW5-JsonMangler/
>>>>>
>>>>> Then you can make $index=level1/Title, $index=level2/Title, etc. and
>>>>> create nested data tiddlers.
>>>>>
>>>>> Good luck!
>>>>>
>>>>>
--
You received this message because you are subscribed to the Google Groups
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/tiddlywiki/0c306269-78ba-4543-95f0-65d6fceded3a%40googlegroups.com.