JSFiddle - React, Tailwind, and code Playground
HTML
<input type='text' data-bind='value: computedValue' />
<span data-bind='text: someValue'></span>
<button data-bind='click: updateValue'>Update</button>
JavaScript
var vm = function () {
var self = this;
this.someValue = ko.observable('random value');
this.updateValue = function () {
self.computedValue('random value ' + Math.round(Math.random()*10), 'system');
}
this.computedValue = ko.computed({
read: function () { return self.someValue(); },
write: function (newValue, param) {
if (param === 'system') {
alert('Updated by function');
} else {
alert('Updated by user input');
}
self.someValue(newValue);
}
});
}
var vmi = new vm();
vmi.someValue('other random value');
ko.applyBindings(vmi);