JSFiddle - React, Tailwind, and code Playground

by Sourabh Tewari

HTML

<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js"></script>
<div class="modal fade" tabindex="-1" role="dialog" data-bind="modal:showDialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                 <h4 class="modal-title">title</h4>

            </div>
            <div class="modal-body">
                body
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary btn-xs" data-bind="click : submit">Close</button>
            </div>
        </div>
    </div>
</div>

<button data-bind="click: function(){showDialog(true)}">Show</button>

JavaScript

ko.bindingHandlers.modal = {
    init: function (element, valueAccessor) {
        $(element).modal({
            show: false
        });

        var value = valueAccessor();
        if (ko.isObservable(value)) {
            $(element).on('hide.bs.modal', function() {
               value(false);
            });
        }
        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
           $(element).modal("destroy");
        });

    },
    update: function (element, valueAccessor) {
        var value = valueAccessor();
        if (ko.utils.unwrapObservable(value)) {
            $(element).modal('show');
        } else {
            $(element).modal('hide');
        }
    }
}

function PopupViewModel() {
    var self = this;
    this.showDialog = ko.observable(false);

    this.submit = function () {
        //true
        self.showDialog(true);
        return false;
        }
}

ko.applyBindings(new PopupViewModel());