Ok, apparently resolveNode() works a little different from what I thought, and I just learned something new, so thanks :d
The way resolveNode() works is it will start from the node that it is called from. So xfa.resolveNode() starts from top level. Whereas, xfa.form.formName.subForm1.subForm2.resolveNode() would start from the subForm2. At this point it will look at all nodes that share the same parent as the one from which it is called from. If it doesn't find what it's looking for it will then traverse UP the tree to look for it (yes, UP, not down). That's why it doesn't find your TextField1, because it is lower in the tree than the top level...
So at this point you may react as I did and say something like "Wow, searching UP a tree is $@#%$# useless". Well, it might actually be useful in some circumstances, and luckily there is a notation you can use to make it search down the tree too. If you do something like:
xfa.resolveNode("form1..TextField1");
This tells it to start at form1 (you'd rename this to whatever you top level form node is called) and the .. says look DOWN and find TextField1. So if you use that on your form you will be able to find TextField1 regardless of where it is on the form.
Chris
Adobe Enterprise Developer