The problem you ran into was that in your script you have paths, such as Company.Name , for which you want to bind data to changes not only in the sheet property, but also in changes related to replacing the objects above in the path (in this case, the Company).
To do this, you need to use the syntax data-link="Company^Path" .
See the "Ways" section: sheet changes or profound changes to this documentation topic: http://www.jsviews.com/# observe@deep .
See also examples, such as Example: JsViews with regular objects and an array in this section: http://www.jsviews.com/#explore/objectsorvm .
Here is an update to your jsfiddle using this syntax: https://jsfiddle.net/msd5oov9/2/ .
BTW, FWIW, in your fix using {^{for}} you did not need to use the second template - you could also write:
<form class="form-horizontal"> {^{for Company}} ... <input type="text" data-link="Name" /> {{/for}} </form>
To answer your subsequent question in your comment below, you can associate any "block" tag with a template. Using tmpl=... in the tag means that you decide to split the contents of the block into a separate reusable template. ("Partially" if you want). The data context for this template will be the same as in the block.
Thus, the {{include}} {{if}} and {{else}} tags do not move the data context, but {{for}} and {{props}} do. With custom tags you can decide ...
So, in your case, you can use either {^{for Company tmpl=.../}} or {{include tmpl=.../}} , but in the second case, your other template that you reference will use <input type="text" data-link="Company^Name" /> , not <input type="text" data-link="Name" /> .
Here are some relevant links: