JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<confirm-button params="text: 'click me to confirm'" data-bind="render"></confirm-button>
JavaScript
ko.components.register('confirm-button', {
viewModel: function (params) {
params = params || {};
this.text = params.text || '(no text passed in)';
},
template: '<button data-bind="text: text"></button>'
});
ko.bindingHandlers.render = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.bindingHandlers.render[element.tagName.toLowerCase()](element);
}
};
ko.bindingHandlers.render['confirm-button'] = function (element) {
ko.utils.registerEventHandler(element, 'click', function (event) {
if (!confirm('Are you sure?')) {
event.preventDefault();
}
});
};
ko.applyBindings();