Hey Josh,
Its been a while since I've had to do this as well, but the exception you are getting is likely because the hidden property needs to be a boolean for extjs to correctly set the hidden state of the column. So there is no "out of the box" hide/show for columns like you would hope for with GluJS... sorry to say. However, with all things... where there is a will, there is a way.
What you can do is listen on the hide/show event on the grid for all columns and update the property in your viewmodel accordingly. Something like this might work?
listeners: {
columnhide: function(ct, column, eOpts){
grid.vm.set(column.dataIndex + 'Hidden', column.hidden)
},
columnshow: function(ct, column, eOpts){...}
}
As for the reverse, you could listen on any of those properties changing in your viewmodel and fire a grid.reconfigure event when any of those properties change (probably not the most efficient way, but it would certainly get the job done for a first pass).
Hopefully that helps! Let me know if I can be any more help :)
-Ryan