In this chapter, we covered a huge number of useful Knockout.js possibilities to create powerful applications.
We also discussed how to exchange the data between the client and server with the JSON format. The mapping plugin provides us with an easy way to use JSON data in the Knockout.js ViewModel with the observables properties.
Now, we know how to create complex hierarchical markup with the help of binding contexts. We can define our own custom bindings in addition to the standard Knockout.js bindings. Moreover, we can extend the basic functionality with the help of the binding extenders and custom functions for the Knockout.js objects.
Finally, we saw how to define flexible and reusable HTML markup with templates.
All of these approaches allow us to use the full power of the Knockout.js framework and create really great applications.