将案例动态添加到交换机

时间:2016-03-03 10:12:56

标签: javascript jquery

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

4 个答案:

答案 0 :(得分:10)

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

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

您可以使用以下方式添加新条目:

 for($x = 0 ; $x < 50 ; $x++){
                    if(($orders[$x]['paymentStatus'] == 'paid') ||           ($orders[$x]['paymentIsPost'] == true)){
                        if($orders[$x]['id'] == $parcels[$x]['data']['seoshop_order_id']){

                                echo '<pre>';
                                var_export($orders[$x]['id']);
                                var_export($orders[$x]['lastname']);
                                var_export($orders[$x]['paymentStatus']);
                                var_export($orders[$x]['paymentIsPost']);
                                var_export($parcels[$x]['name']);
                                var_export($parcels[$x]['data']['seoshop_order_id']);
                                echo '</pre>';
                        }   
                    }
                }

答案 1 :(得分:1)

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

您设置了一个具有一定数量选项的数组(让我们说2):

var cases = [false, false];

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

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

您可以点击上面的代码段以查看其有效;)

&#13;
&#13;
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<br>');
        break;
     case cases[0]:
        $("body").append((e.keyCode == '38' ? 'UP' : 'RIGHT' ) + '<br>');
        break;
     case cases[1]:
        $("body").append((e.keyCode == '37' ? 'LEFT' : 'DOWN' ) + '<br>');
        break;

  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

At the begining the switch only take in account SPACE keyCode<br>
-if you click option1 then it recognize UP and LEFT<br>
-if you click option2, the aboves are replaced with RIGHT and DOWN<br><br>

<div id='option1'>OPTION 1</div>
<div id='option2'>OPTION 2</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用 Object 来切换案例。在这种情况下使用 Object 而不是 Array 的优点之一是它大大减少了由 Array 中的错误索引引起的错误。对案例使用 Object,您还可以将案例值提取到另一个脚本中。这对 Single Responsibility Principle 有帮助,因为您只需要在 switch case 中实现业务逻辑,而不必担心维护正确的 case 值。

const OP = {
    ADD: 'ADD',
    MULTIPLY: 'MULTIPLY',
};
const choice = 'ADD';
switch (choice) {
    case OP.ADD:
        console.log('You chose add');
        break;
    case OP.MULTIPLY:
        console.log('You chose multiply');
        break;
    default:
        console.log('Operation is not defined');
}

答案 3 :(得分:0)

you can create a custom switch statement as shown below,

var callbackArr = [];
function customSwitch(casestmt, callback){
     var callbackObj = {};
     callbackObj['cs'] = casestmt;
     callbackObj['clbkfn'] = callback;
     callbackArr.push(callbackObj);
}
function switchExecute(condition) {
   return callbackArr[callbackArr.findIndex(data => data.cs ===condition)].clbkfn(); 
}
jobs = [{'jobname': 'job1'},{'jobname': 'job2'}, {'jobname': 'job3'},{'jobname': 'job4'} ];
jobs.forEach((job)=> {
  customSwitch(job.jobname, ()=> {console.log(job.jobname)});
});

switchExecute(args[0]);