CanJS
Build CRUD apps in fewer lines of code
...After data is created, updated, or destroyed, CanJS automatically updates your lists for you. Filtering and sorting are preserved, so you don’t have to manually update your lists or fetch the same data again. The model layer is responsible for making GET, POST, PUT, and DELETE requests to your backend. With your component UI code using the model’s standard interface to make requests, if the backend API changes, you only have to configure the model and not change every component that uses that backend API.