интеграция диалогового окна jquery ui с knockoutjs

Я пытаюсь создать привязки knockoutjs для диалогов jquery ui, и не могу открыть диалог. Элемент диалога создан правильно, но, похоже, имеет display: none , который вызов dialog ('open') не удаляет. Кроме того, вызов dialog ('isOpen') возвращает объект диалога, а не логическое значение.

Я использую последнюю версию knockoutjs и jquery 1.4.4 с jquery ui 1.8.7. Я также пробовал с jQuery 1.7.1 с теми же результатами. Вот мой HTML:

foo dialog

, а это javascript:

var jQueryWidget = function(element, valueAccessor, name, constructor) {
    var options = ko.utils.unwrapObservable(valueAccessor());
    var $element = $(element);
    var $widget = $element.data(name) || constructor($element, options);
    $element.data(name, $widget);

};

ko.bindingHandlers.dialog = {
        init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
            jQueryWidget(element, valueAccessor, 'dialog', function($element, options) {
                console.log("Creating dialog on "  + $element);
                return $element.dialog(options);
            });
        }        
};

ko.bindingHandlers.dialogcmd = {
        init: function(element, valueAccessor, allBindingsAccessor, viewModel) {          
            $(element).button().click(function() {
                var options = ko.utils.unwrapObservable(valueAccessor());
                var $dialog = $('#' + options.id).data('dialog');
                var isOpen = $dialog.dialog('isOpen');
                console.log("Before command dialog is open: " + isOpen);
                $dialog.dialog(options.cmd || 'open');
                return false;
            });
        }        
};

var viewModel = {
    label: ko.observable('dialog test')
};

ko.applyBindings(viewModel);

Я установил JSFiddle , который воспроизводит проблему.

Мне интересно, связано ли это с knockoutjs и обработкой событий. Я попытался вернуть true из обработчика кликов, но это ни на что не повлияло.

37
задан Kyle Trauberman 4 April 2013 в 21:55
поделиться