Experienced web developers use MVC frameworks not because it is an interesting thing to do, but because it is the proper way to build a web application from scratch. The way MVC frameworks work is by organizing the concerns in an application into models, views, controllers. The frameworks don’t always respect this structure, an example being Backbone which adds the responsibility of the controller in view, but is the basic way for MVC frameworks to work.
Backbone Js
Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions,views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface The cool thing about backbone.js is that it seems to be pretty popular – so you will find a lot of useful stuff out there .Backbone is its popularity and therewith the amount of information you get (for free) on the web, and help provided by the community. In addition, it seems to be an easy starting point for getting in touch with Javascript MVC. The main point here is that Backbone does not offer that much functionality compared to other frameworks like Angular or Ember, which leads to the next positive thing: Backbone’s size is &minified only around 5kb. The template engine Underscore is also pretty cool, but since the other candidates provide similar functionality, this is just a note. While having a closer look at Backbone, I found two negative points. The first point is that the documentation on the Backbone page is not so cool and is more a mess. The second point, and for me a deciding point: the version number. Backbone is currently (November 2012) only available in 0.9.2, which means that a final 1.0 version is still not there. Surely, it will not change a lot from 0.9 to 1.0 –
Backbone seems to be a very good candidate for smaller projects, due to its simplicity and popularity.
Ember js
Ember.js. Whilst Backbone is fairly low level, with a lot of code that you need to write yourself, such as code to update the view when model data changes, Ember does a lot of that work for you. It’s more opinionated because it tries to do a lot more for you, but that also leads to you having to write less boilerplate code.
Ember’s main features are its data binding; obejcts in Ember can bind properties to each other, so when a property changes in one object, the other is kept in sync. Another is the ability to define functions on an object that you can then treat as properties. Hence, if a model has a first and last name, you could create a function to define a person’s fullname, and have it treated as if the model has a fullname property. Coming from a Backbone perspective, the feature most likely to draw you in is that Ember automatically updates its views when data changes – saving you a lot of work. Thiscomparison post between the two sums it up quite nicely: “Backbone is more explicit and less magical”. Depending on your perspective, that can be a good or a bad thing. Some prefer Backbone because it keeps things simple, and lets you do everything how you want, whereas Ember does much more for you. A framework that does more for you means you relinquish some of the control, but gain time in not having to write code to handle a lot of the mundane functionality.
Ember also has more traditional controllers. Views (usually written in Handlebars) provide ways of attaching certain buttons or links to Ember controller actions. Of course, controllers don’t need to deal with updating content, but can house methods to deal with just about everything else. This is where most of your methods will go that deal with the data. In a todo app, for example, you might write methods that return just the completed todos, or the methods that save another todo item.
Angular js
AngularJS is an open-source JavaScript framework, maintained by Google, that assists with running single-page applications. Its goal is to augment browser-based applications with model–view–controller (MVC) capability, in an effort to make both development and testing easier . Angular’s approach is kind of different compared to the other ones: You provide your HTML code with additional attributes to initialize MVC functionality. A framework comprising pretty cool ideas.
Angular offers a lot of great and cool features, like support for internationalization and the support for Domain Specific Languages (DSL), which means that you can create your own HTML elements with semantic behind. Angular also seems to be (from a developer’s point of view) the most modern one of my candidates. I really like the Dependency Injection thing the developers implemented. The size is with 78kb gzipped ok. So far, no cons from my side. If you like the style of Angular, then everything is cool and fresh.