2012-10-19 22 views
1

我有兩個函數針對兩個不同的小部件類型執行相同的操作。我想我已經想出了一個實現,它允許我使用一個通用函數而不是兩個函數。我的想法是,我將每種類型的小部件都傳遞給這個通用函數。然而,我與細節掙扎:如何將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'); 

現在,這段代碼立即拋出一個錯誤--TemplateLookupTree未定義。看來我不能通過它的名字來引用這個小部件,除非我正在初始化它(例如lookupTreeViewDialog.TemplateLookupTree());

如果我在傳遞到buildGenericLookupTree之前初始化TemplateLookupTree - 每當使用lookupTreeWidget時都會收到錯誤,並且喜歡函數。

關於如何幹這段代碼的任何建議?

回答