This code is almost correct. I have to click the button "make server set" and then go into the textarea > make a change > tab out. Then the readonly takes effect. How can I fix this code so that readonly takes effect immediately after I click the button? Fiddle
HTML
<textarea readOnly="true" data-bind="value: text, readOnly: viewModel.text.isServerSet" rows="5" cols="20"></textarea>
<input id="makeServerSet" type="button" value="Make server set" id="makeServerSet" />
JavaScript
ko.bindingHandlers.readOnly = {
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
if (value) {
console.log('element: ' + element);
console.log('made readonly: ' + value);
element.setAttribute("readOnly", true);
} else {
console.log('removed readonly');
element.removeAttribute("readOnly");
}
}
}
ko.extenders.isServerSet = function (target, value) {
console.log('is server set...' + value);
target.isServerSet = ko.observable(value);
return target;
};
var viewModel = {
text: ko.observable("test").extend({
isServerSet: false
}),
isServerSet: ko.observable('')
};
ko.applyBindings(viewModel);
$('#makeServerSet').click(function() {
viewModel.text.isServerSet = true;
console.log('made server set');
});