如何将jQuery UI小部件传递给函数?

时间:2012-10-19 22:10:41

标签: javascript jquery jquery-ui

我有两个函数可以针对两种不同的窗口小部件类型执行相同的操作。我以为我已经想出了一个允许我使用一个泛型函数而不是两个函数的实现。我的想法是,我会将每种类型的小部件传递给这个通用函数。但是,我正在努力解决细节问题:

以下是我的两个函数,它们重复了很多代码:

buildTemplateLookupTreeDialog: function () {
    lookupTreeViewDialog.bind('loaded.jstree', function () {
        var templateID = workflowDialogContent.find('#DeviceTemplateID').val();
        lookupTreeViewDialog.TemplateLookupTree('setSelectedNode', '#' + templateID);
        lookupTreeViewDialog.TemplateLookupTree('saveCookie');
    }).TemplateLookupTree();

    lookupTreeViewDialog.TemplateLookupTree('onNodeDblClick', function (template) {
        if (openDialog != null) {
            openDialog.TemplateLookupTree('saveCookie');
            openDialog.data('result', { id: template.id, name: template.name });
            openDialog.dialog('close');
        }
    });
},
buildComponentLookupTreeDialog: function () {
    lookupTreeViewDialog.bind('loaded.jstree', function () {
        var componentID = workflowDialogContent.find('#DeviceComponentID').val();
        lookupTreeViewDialog.ComponentLookupTree('setSelectedNode', '#' + componentID);
        lookupTreeViewDialog.ComponentLookupTree('saveCookie');
    }).ComponentLookupTree();

    lookupTreeViewDialog.ComponentLookupTree('onNodeDblClick', function (component) {
        if (openDialog != null) {
            openDialog.ComponentLookupTree('saveCookie');
            openDialog.data('result', { id: component.id, name: component.name });
            openDialog.dialog('close');
        }
    });
}

这就是我认为通用实现的样子:

buildGenericLookupTreeDialog: function (lookupTreeWidget, title, idSelector, nameSelector) {
    lookupTreeViewDialog.bind('loaded.jstree', function () {
        var selectedNodeID = workflowDialogContent.find(idSelector).val();
        lookupTreeViewDialog.lookupTreeWidget('setSelectedNode', '#' + selectedNodeID);
        lookupTreeViewDialog.lookupTreeWidget('saveCookie');
    }).lookupTreeWidget();

    lookupTreeWidget('onNodeDblClick', function (node) {
        if (openDialog != null) {
            lookupTreeWidget('saveCookie');
            openDialog.data('result', { id: node.id, name: node.name });
            openDialog.dialog('close');
        }
    });
}

//Called like so
this.buildGenericLookupTreeDialog(TemplateLookupTree, 'Select Template', '#DeviceTemplateID', '#DeviceTemplateName');

现在,此代码立即抛出错误 - 未定义的模板摘要。我似乎无法通过名称引用小部件,除非我实际上正在初始化它(例如lookupTreeViewDialog.TemplateLookupTree());

如果我在传递给buildGenericLookupTree之前初始化TemplateLookupTree - 每当使用lookupTreeWidget时我都会收到错误。

有关如何干这段代码的任何建议吗?

1 个答案:

答案 0 :(得分:1)

将查找树小部件名称作为字符串传递,并检查此线程以获取有关如何调用它的信息: How to execute a JavaScript function when I have its name as a string