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.