I've been studying javascript MV* frameworks for the last few months.  The two-way data-binding between a document object and the UI is an exceptionally useful tool for maintaining consistency.

I studied
and I found Angular to be the overall best framework for the following reasons.
  • backbone does not provide two-way data-binding.  This is a critical deficiency, which greatly diminishes the usefulness of the product.
  • EM is my second-favorite framework.  I like how they use handlebars, and thus EM extends an existing template engine rather than introduce a proprietary one.
  • KO has a sloppy scope.  While I looked at the framework multiple times, each time I did not get far because it appeared there is no division of scope.  Instead, everything shares a universal / global scope with the DOM.
    • EM does the best job with scope.  Creating containers is natural, and you can manipulate document objects from the DOM.
    • NG also features a global scope, but an NG application is packaged into a scope, which is removed from the DOM.  I went back-and-forth on whether or not I liked the NG approach because once you're in the application scope, that's it.  There is no external access; everything must be done within the application.  This took some time to understand how to approach some things, but once understood, I came to like the approach.
  • One thing that turns me off with EM is the UI bloat; it sticks all kinds of filler into your HTML.  I imagine this bloat is part of why EM consistently scores way lower than NG and KO in efficiency/speed comparisons.
  • Something else about EM that gives me pause is the project history.  EM was originally going to be SproutCore v2 (SC), but it got forked, changed names, and generally got passed around to get where it is.  I think the future of EM looks bright, but the history looked unstable.  And it seems EM makes some design decisions based on: "if we do it that way, then why'd we fork from SCv2?"
  • NG provides the batarang.  I haven't see any other framework providing a runtime debug utility such as this.  When considering a complex application, a utility such as this just makes sense.
In the subpages, I'll cover some of the gotchas and such that I've run into working with angular.
Subpages (1): Overview