Thanks for this insight. Having no experience in these new JS frameworks, I'm going to eventually have to choose one, and based on recent HN comments I had almost dismissed Knockout since Backbone is "clearly" better. The points you raised are very informative and now I'm back to looking at Knockout.
I have to say that both frameworks have great supportive communities. As for features here's a very simplified comparison:
Backbone pros:
- eases code structuring with Models and Collections
- gives routing (history management)
- template engine agnostic
Backbone cons:
- Out-of-box UI support is weak.
- Binding plugin is weak
- No automatic dependency detection between the fields (I'm sure there are some external libraries to support that)
Knockout pros:
- first-class dependency detection and event model
- powerful UI bindings (be sure to check out custom bindings - they are very convenient and can make your life a lot easier)
- top-notch templating
- it's believed that MVVM pattern is more suitable for inexperienced developers and eases collaboration in team. My experience confirms that.
Knockout cons:
- No models, doesn't help you with project structure - you're on your own
- Model plugin is there but I can't compare it to Backbone, sorry. It does have synchronization with RESTfull backend.
- Tied to a specific template library. It's possible to integrate other templates with custom providers but I don't know how easy/hard it is.
- No routing support
I picked KO because I believe that framework should do the hardest part and it's ok if the easier parts don't get addressed well. When starting a project I asked myself what would be harder: deal with UI elements or with AJAX. UI seemed harder and Knockout addresses that a lot better than Backbone, so we went with Ko. My team loves it.