Distinguishing textblock/data type in an edit events


my nodes look like this:

| Title    |
| items[0] |
|   sub[a] |
|   sub[b] |
| items[1] |
|   sub[a] |

The title, and each of the variable number of items and subs, is made up of an editable TextBlock. Depending on which kind of TextBlock is edited, I want different consequences.

When the Title is modified, I want a call titleModified(nodeKey).to happen.
When an item is modified, I want a call to itemModified(nodeKey,itemKey).
When a sub is modified, I want a call to subModified(nodeKey,itemKey,subKey).
(I know how to find subKey and itemKey given the part in which the TextBlock that was edited sits.)

How can I easily detect whether a title, item, or sub TextBlock was modified, using a listener?

I didn’t find a textEdited property for the TextBlock where I can assign an event handler. Is there one?
The TextBlocks all use .makeTwoWay(), so I could set a different backConverter for each. But this is ruled out by the documentation:

Conversion functions must not have any side-effects other than setting the source property.

I am currently using the textEdited listener on the diagram, but it’s hard to evaluate what kind of textblock the event came from. If I could assign category:"title", category:"item" or category:"sub" to my TextBlock, the problem would be solved, but I cannot see such a possibility.
If it’s possible to do this using a ChangedEvent (presumably using a modelChange of type nodeDataArray), what is the pattern for doing so? This is my least-preferred solution, since I find filtering through hundreds of changes in the transaction until I’ve found the right one unintuitive – and the functions titleModified itemModified subModified make further changes to the model, so I have to queue the changes to happen after identifying those necessary changes in a transaction.changes.each call; I only know how to organise this in awkward ways.

It might be easiest to give the three TextBlocks different GraphObject.names, one for the “Title” TextBlock, one in the Panel.itemTemplate, and one in the nested Panel.itemTemplate.

Thanks, I will, in conjunction with the textEdited diagram listener. Is it safe to give these things non-unique names? I guess this breaks the findObject property, but if it is not used internally …

If you consider adding a textEdited handler to the TextBlock itself, I would be pleased.

Within each template the names should be unique. But clearly you’ll want unique names amongst all of the TextBlocks.

We should consider your request when we consider reimplementing text editing functionality for version 2.0.