【发布时间】:2012-01-26 12:49:36
【问题描述】:
我正在尝试为 jquery ui 对话框创建 knockoutjs 绑定,但无法打开对话框。对话框元素已正确创建,但似乎有 display: none 调用 dialog('open') 不会删除。此外,对dialog('isOpen') 的调用返回对话框对象而不是布尔值。
我正在使用最新的 knockoutjs 和 jquery 1.4.4 和 jquery ui 1.8.7。我也用 jQuery 1.7.1 尝试过,结果相同。这是我的 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>
这是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,但这似乎没有影响任何事情。
【问题讨论】:
标签: jquery-ui jquery-ui-dialog knockout.js