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時都會收到錯誤,並且喜歡函數。
關於如何幹這段代碼的任何建議?
是啊。你是對的。 –