The reason the demo you're pointing to works is because the rows with templates are initially created on the server. When working with client-side binding, "basic" templates can used if they are rendered on the server and if the IDs of the controls in the template match the name of the DataField. From the online docs for client-side binding:
Since RadGrid transfers JSON data when bound on the client, if you have some kind of templates -GridTemplateColumn/ NestedViewTemplate - there is no proper way for populating the controls in these templates as they are templates. However, for the rows that are initially created on the server (these PageSize items), RadGrid will manage to populate a control in GridTemplateColumn if the control in that ItemTemplate has ID set equal to the DataField property of that column.
If you want to replicate this scenario, you should be able to do it by following the code examples in the demo you linked to. If your code looks the same as the demo and you're still having problems, let me know and we'll dig deeper.