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.
Essentially a binding or a data binding is a way to link your ViewModels to your Views(templates) and vice versa. KnockoutJS uses two-way data binding, which means changes to your ViewModel influence the View and changes to your View can influence the ViewModel.
The $data variable is a built-in variable used to refer to the current object being bound. In the example this is the one of the elements in the viewModel.
$parent : This is the view model object in the parent context, the one immeditely outside the current context. $root : This is the main view model object in the root context, i.e., the topmost parent context. It's usually the object that was passed to ko.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With