Knockout SubscribeChanged
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.1/knockout-min.js"></script>
<input type="text" data-bind="textInput: name" />
<hr />
<div data-bind="text: name">
</div>
JavaScript
var viewModel = {
defaultName: "John",
name: ko.observable("John")
};
viewModel.name.fn.subscribeChanged = function (callback) {
var oldValue;
this.subscribe(function (_oldValue) {
oldValue = _oldValue;
}, this, 'beforeChange');
var subscription = this.subscribe(function (newValue) {
callback(newValue, oldValue);
});
return subscription;
};
ko.applyBindings(viewModel, document.getElementById("body"));
viewModel.name.subscribeChanged(function (newValue, oldValue) {
if (newValue.indexOf(viewModel.defaultName) !== 0) {
viewModel.name(oldValue);
}
});