Check Steven Sanderson’s blog for more info. Version 3 reveals lots of node integration here is a recap:
ko.computedand other non-DOM-related parts of KO can now run on the server in Node.js. NPM package available.
- The options binding has been rebuilt and made much smarter:
- It now inserts and removes
<options>nodes incrementally (rather than recreating them all) as your underlying array changes, leading to much better performance on older browsers.
- A new
optionsAfterRendercallback lets you add custom code to modify
<options>nodes as they are added to the document, in case you need this to interoperate with third-party DOM libraries
- The template binding now allows use of an observable template name. This gives you an extra way of switching templates dynamically at runtime.
- The css binding now allows use of any legal CSS class name. Previously it didn’t allow dots or slashes in class names.
ko.unwrapis the new, shorter name for
ko.utils.unwrapObservable. Don’t worry – the old name still works too!
Bugfixes and compatibilty/perf improvements include:
- KO will now warn you with an error if you try to apply bindings to the same element more than once (this was always an error; we just didn’t report it before)
- The hasfocus and options bindings now work around additional edge-case browser quirks, e.g., during page load when running in an iframe in IE9 in compatibility mode (seriously!). This gives you a more consistent developer experience.
- Observable arrays have better handling of unexpected parameters (for example, when initialized with non-array values).
templatebinding now has more predictable handling of malformed HTML markup
- ko.toJS now usefully handles
Booleanobject-type properties (as opposed to string/number/bool primitives, which have always worked)
ko.computednow recovers from exceptions thrown during your evaluation callback. Previously, an evaluator exception would stop all future updates for that
- Better whitespace handling in string-based templates (e.g., you can now put spaces around the equals character in
data-bind = '…', if you care about that kind of thing).
- General perf improvements (e.g., we avoid evaluating
scrollTopwhen not absolutely necessary, as it triggers a rendering reflow).
- More than 20 bugfixes for minor issues