Is there a way to check whether applyBindings has been called for a page area or not?
It seems knockout doesn't like when applyBindings is called on the same page more than once.
Is there a way to check whether applyBindings has been called for a page area or not?
It seems knockout doesn't like when applyBindings is called on the same page more than once.
Knockout 2.0 has two functions that you could use for this purpose. ko.dataFor and ko.contextFor take in a node and return either the Knockout data that would be available to it for binding at that scope (dataFor) or the entire binding context at that scope (contextFor), which includes $data, $parent, $parents, and $root.
So, you can do something like:
var isBound = function(id) {
return !!ko.dataFor(document.getElementById(id));
};
Here is a sample: http://jsfiddle.net/rniemeyer/GaqGY/
However, in a normal scenario you should really look to call ko.applyBindings a single time on your page. It depends on what you are trying to accomplish though. Take a look at this answer for some suggestions on ways to manage multiple view models: Example of knockoutjs pattern for multi-view applications.
Typically, you would do a <div data-bind="with: mySubModel"> and when mySubModel gets populated then that area would appear and be bound.