【发布时间】:2009-03-24 18:22:49
【问题描述】:
我正在使用 JavaScript 为 Web 应用程序创建上下文菜单。菜单可以出现在许多上下文中,并且有不同的选择。对于每个上下文/选择,我可以有不同的功能:
grid1_delete()
grid1_duplicate()
grid2_delete()
grid2_add()
grid2_duplicate()
并在构建菜单时对其进行硬编码。我不喜欢的是可能会有很多重复的代码。所以我在考虑使用调度程序函数,但它可能会导致可能很长的嵌套 switch 语句:
function contextMenuClick(context, menuItem) {
var action = menuItem.innerHTML;
switch (context) {
case 'grid1':
switch(action) {
case('delete'):
// do delete for grid1
break;
case('duplicate'):
// do duplicate for grid1
break;
default:
console.log('undefined action in contextMenuClick/grid1: ' + context);
}
break;
case 'grid2':
switch(action) {
case('add'):
// do add for grid2
break;
case('delete'):
// do delete for grid2
break;
case('duplicate'):
// do duplicate for grid2
break;
default:
console.log('undefined action in contextMenuClick/grid2: ' + context);
}
break;
default:
console.log('undefined context in contextMenuClick: ' + context);
}
哎呀。一定有更好的方法。也许调度员的麻烦多于它的价值。我看过一些 the related posts,但我不太了解如何将它们应用于这种确切的情况。
【问题讨论】:
-
不同的网格支持不同的功能还是都支持同一套?
-
我不清楚 grid1_delete 和 grid2_delete 有什么不同。他们对不同的物体做同样的事情吗?还是他们做了根本不同的事情?如果是前者,则应将它们组合成一个通用函数。
-
不同的网格支持不同的功能。更糟糕的是,同一网格的不同行支持不同的功能,和/或作用于不同类型对象的类似功能。理论上,可能会发生一些重构/参数化,但可能并非在所有情况下都发生。
标签: javascript nested switch-statement