Dev Blog
Knockout JS offers manual subscribing to observables, so that arbitrary code can be executed whether the observable value changes. This might be useful to update user interface when value changes, or to perform AJAX requests based on value of observable. For instance filters can be implemented, which will pull new data according to observable value.
When using bare KnockoutJS the observable itself is object having
method subscribe
. Example of subscribing in
bare KO:
app.model.filter.active.subscribe(function(newValue) { console.log("Perform AJAX request with: " + newValue); });
However, when using
EcmaScript 5 plugin, which allows using observables without
parenthesis, the subscribe
method is not available.
The value of active
field would appear as a plain
JavaScript type, for instance boolean value. Luckily the
KO have the method to obtain real observable with
ko.getObservable
where first parameter is view
model, the latter one is observable name. The resulting code is a
bit different that that from the bare KnockoutJS in terms of
getting access to subscribe
method:
ko.getObservable(app.model.filter, 'active').subscribe(function(newValue) { console.log("Perform AJAX request with: " + newValue); });
When added explicit subscription with method above, just setting
model value would execute function passed to
subscribe
method:
app.model.filter.active = true; // console logs: Perform AJAX request with: true