Overall I have been very impressed with Spine – there is definitely a steep learning curve (especially if you’re doing TDD), but it’s a fantastic framework to work with and once you understand the underlying concepts it becomes very powerful and actually quite easy to work with.
The MVC Pattern
The models and controllers are very similar to their Rails counterparts. I especially like the interaction with the models – the data storage and optimistic persistence really feels familiar if you’re coming from Rails.
Integrating with Rails is also very straightforward and Spine has some great conventions that makes all the persistence and data retrieval very easy. In fact, if you stick to all the Spine conventions you wouldn’t need to write any custom AJAX calls.
Spine is a pretty lightweight framework – the core is only 7K, which is really nice. However, it does mean that you need to depend on other libraries for some of the features you’re going to need. For example, you’ll probably need to use jQuery templating to render your views (even the the example that come with Spine uses this).
There are also some features that don’t exist at all – for example, there doesn’t seem to be any support for partial views. We implemented this ourselves, but it seems to be a reasonably common use case. I would also like to see better support for view helpers – Spine does support this, but it’s not really a first class citizen like it is in Rails.
I was very sceptical of the overall convention – especially the optimistic persistence – but after using it for a while it becomes second nature.
Spine.js is definitely a fantastic framework in my opinion and I would highly recommend it to anyone. The conventions make it easy to create a great user experience and the testability makes for a highly maintainable solution.