I’m currently working on a project that started out as a regular asp.net MVC application, but as the requirements grew it became quite clear that we had to focus more on the client side. One of the requirements was that we had to have an audio player that played continuously as you browsed the different pages. And that forced us to redo some of the code so that it became an Single Page Application (SPA). So began the quest for a JS framework that could help us with routing and building dynamic views. We sought after a framework that had good separation of concerns, was easily extended and testable. The alternatives was many (KnockoutJS, Ember, Backbone, Durandal, AngularJS), and that’s just scratching the surface.
I started with these based of several criteria: usage in the .net community, traction on github, documentation, issues on stackoverflow and how deterministic they are. As I tested each and everyone of those I looked for how they solved routing, templating and data handling. I took one use case and solved with each framework, much like http://todomvc.com/ where a ToDo application is solved in different MVC framworks.