0

我正在使用该机制创建一个jQuery对话框。widget factory

函数 ($) {

    function myDialogDiv() {...} // 为对话框创建所有必需的 HTML

    $.widget("myApp.myDialog", {

        _创建:函数(){
            var div = myDialogDiv();
            var props = {autoOpen:false, height:'200', width:'30%'};
            var onClose = 函数 () {};
            $(div).dialog(props, onClose);
        },

        _init:function() {$('#myDialog').dialog('open');}
    })

}(jQuery))

...

// 点击按钮打开对话框
$('.myDialogBu​​tton').bind("点击", function(){$(this).myDialog();});

它工作正常。现在我想知道是否可以创建一个jQuery没有.widget factory

4

1 回答 1

1

当然,您可以编写自己的对话框库或使用另一个具有自己初始化方案的对话框库;-)

但如果失败了,不。jQuery 对话框(就像所有 jQuery UI 小部件一样)需要一组特定的初始化参数,您可以在每次需要小部件时重现它们,或者您可以使用“小部件工厂”样式将所有初始化内容隐藏在构建器中功能。

此外,您必须记住,jQuery UI 就像 jQuery 一样,不会尝试为您做所有事情:它们故意将很多东西留给开发人员,例如。将按钮连接到对话框的生成。当您考虑它时,这是有道理的,因为其他人可能使用 A 标记,其他人可能使用 DIV 等。库的目标只是让您不必重做常见的东西,而不是让您免于编写任何代码在你的最后。

我能看到的唯一其他选项是一种半对半方法,您每次都重新制作对话,但使用一组全局选项来保存重复:

var GLOBAL_DIALOG_PROPS = {autoOpen:false, height:'200', width:'30%'}
function dialogButtonClickHandler() {
    $(this).myDialog().dialog(GLOBAL_DIALOG_PROPS, onClose).dialog('open');
}
$('.myDialogButton').bind("click", dialogButtonClickHandler); 

但归根结底,必须完成初始化工作,如果您要在代码中的多个位置执行此操作,明智的做法是将其干燥并将公共位存储在某处(例如在您的小部件工厂中) .

于 2012-07-22T18:16:57.720 回答