Knockout.js is a very powerful 2-way binding MVVM framework for JavaScript built by Steve Sanderson. The basic idea is rather than work directly with the DOM, a ViewModel ties a JavaScript object to the DOM and any updates to the ViewModel are automatically reflected in the DOM and any DOM changes are reflected in the ViewModel. It provides very little opinion on specifics about how to structure applications which makes it flexible.
Below are some tips and tricks I've learned in using Knockout in a few large scale applications.
* Context Issues
* Better ViewModels with a BaseViewModel
* Accidental Rendering Templates
* Using Extenders
* Working with fn
* Require.js
* Custom Bindings
* Conclusion