Bootstrap Modal仅在我使用bindingHandler时显示一次

时间:2013-09-18 18:22:23

标签: twitter-bootstrap knockout.js

JSFiddle http://jsfiddle.net/PTSkR/177/

所需行为:当我点击关闭或x按钮时,模态会关闭,但如果点击“显示”,我仍然可以再次打开它。

发生了什么:模式关闭一次,然后再也不会打开。

代码

ko.bindingHandlers.showModal = {
    init: function (element, valueAccessor) {
    },
    update: function (element, valueAccessor) {
        var value = valueAccessor();
        if (ko.utils.unwrapObservable(value)) {
            $(element).modal('show');
                                // this is to focus input field inside dialog
            $("input", element).focus();
        }
        else {
            $(element).modal('hide');
        }
    }
};

1 个答案:

答案 0 :(得分:5)

您需要确保处理模态的hidden事件,以便清除可观察对象。然后,下次将其设置为true时,它将通知任何订户,因为它实际发生了更改(可观察者在其值设置为相同值时不会通知)。

你的init中有这样的东西:

    init: function (element, valueAccessor) {
        $(element).on("hidden", function() {
            valueAccessor()(false); 
        });
    },

如有必要,您可以使用ko.isWriteableObservable来确定传递给绑定的值是否实际上是您可以写入的可观察值。