I will try to answer your question to the best of my ability. With that said, I will say that your question is very broad and rather ambiguous. You were unable to tell what exactly you are looking for in the JavaScript library. You mentioned many different topics that are all complex, and each of them exists for the specific purpose of the server in client development. Although it is possible that the realities of all these concepts exist in the wild, there is no single answer for solving all your problems.
I will start with your first point, "UI / Data Separation." This concept really deals with the separation of problems. You want your user interface to exist separately from your data. What you are really looking for here is your HTML to reflect the current state of your data model. You also want this to happen automatically for you. This is a very common workflow with the MVC design pattern. JavaScript has several options: Backbone.js , AngularJS , EmberJS , and the list goes on ...
In my personal experience using quite a few of these different frameworks, I would suggest Backbones for this flexible and lightweight character. At Backbone, we have the concept of "View", which can be linked directly to the data model. It also supports your desired pushSate concept through it. The mechanism of the routes.
The Event Driven User Interface part can be handled by any number of different JavaScript libraries. jQuery is probably the most popular library for attaching events to "all kinds of dom elements". Backbone.js also makes it easy to configure event delegation (via a bubble event) using the View object.
In short, if you want to add structure to your JavaScript ... it really depends on what you want. For simple things, a little manual jQuery will do. If you really want to use an application with a lot of MVC that has potential for growth, it could be an MVC framework like Backbone.
source share