Je suis en train de créer knockoutjs liaisons pour jquery ui boîtes de dialogue, et ne peut pas obtenir la boîte de dialogue ouvrir. La boîte de dialogue de l'élément est créé correctement, mais semble avoir display: none
que l'appelant dialog('open')
n'est pas supprimer. Aussi, l'appel à l' dialog('isOpen')
retourne la boîte de dialogue objet plutôt qu'un booléen.
Je suis en utilisant la dernière knockoutjs et jquery 1.4.4 avec jquery ui 1.8.7. J'ai aussi essayé avec jQuery 1.7.1 avec les mêmes résultats. Voici mon code HTML:
<h1 class="header" data-bind="text: label"></h1>
<div id="dialog" data-bind="dialog: {autoOpen: false, title: 'Dialog test'}">foo dialog</div>
<div>
<button id="openbutton" data-bind="dialogcmd: {id: 'dialog'}" >Open</button>
<button id="openbutton" data-bind="dialogcmd: {id: 'dialog', cmd: 'close'}" >Close</button>
</div>
et c'est le 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);
J'ai mis en place un JSFiddle qui reproduit le problème.
Je me demande si cela a quelque chose à voir avec knockoutjs et la gestion des événements. J'ai essayé de revenir true
à partir du gestionnaire de clic, mais qui ne semble pas affecter quoi que ce soit.