动态添加案例到交换机
我需要动态地将案例添加到交换机。 我希望用户能够添加项目,每个项目都需要它自己的开关案例。
您可以使用具有回调函数的对象:
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