动态添加案例到交换机

我需要动态地将案例添加到交换机。 我希望用户能够添加项目,每个项目都需要它自己的开关案例。

您可以使用具有回调函数的对象:

var callbacks = {}; function add(_case, fn) { callbacks[_case] = callbacks[_case] || []; callbacks[_case].push(fn); } function pseudoSwitch(value) { if (callbacks[value]) { callbacks[value].forEach(function(fn) { fn(); }); } } 

你可以使用以下方法添加新条目:

 add('something', function() { // case for something }); 

这不是最终解决方案,但如果您的自定义案例数量有限,则可以使用:

您设置一个具有一定数量选项的数组(假设为2):

 var cases = [false, false]; 

现在您可以动态更改此数组的值,并且交换机中的案例将遵循:

 switch(condition) { case cases[0]: doStuff(); break; case cases[1]: doSomethingElse(); break; } 

您可以点击上面的代码段来查看它的工作情况;)

 var cases = [false, false]; // so that is not undefined $('#option1').click( function() { cases = [38,37]; }); $('#option2').click( function() { cases = [39,40]; }); $(window).keydown( function(e) { switch (e.keyCode) { case 32: $("body").append('space
'); break; case cases[0]: $("body").append((e.keyCode == '38' ? 'UP' : 'RIGHT' ) + '
'); break; case cases[1]: $("body").append((e.keyCode == '37' ? 'LEFT' : 'DOWN' ) + '
'); break; } });
  At the begining the switch only take in account SPACE keyCode
-if you click option1 then it recognize UP and LEFT
-if you click option2, the aboves are replaced with RIGHT and DOWN

OPTION 1
OPTION 2