2016-08-11 4 views
-1

これは、コードの壊れた部分である:他の関数から呼び出さJavascript:スイッチケースを他の機能で選択できるようにする方法はありますか?

addSkillButton(stonewall); 

object引数が正常に動作します。 switch文に行き、正しい大文字小文字を選択してコードを実行します。しかし、私が持っている問題は、addSkillButton()の機能です。私は手動でオブジェクトを入力することができ、正常に動作しますが、私のスキルシステムは動的です。ケース番号に基づいてオブジェクト名を取得する必要があります。

あなたは以下のコードを見れば、あなたはスキルdeepcut & stonewallの両方に気付くでしょうが、これらは、ユーザーがアップグレードするtrysとして、サブメニューにポップアップするスキルです位置1にあります。これは開かれても問題ありませんが、スキルを選択して追加するのは面倒です.JavaScriptにどのようなケース番号が選択されたかを伝えることができないので、位置1のオブジェクト名を選択してください。

これは私が欲しいものです言うか、行うには:

function radialSelector(object){ 
    switch (object){ 
     case strike: 
     radialSubMenuSkills("position1", deepcut); 
     radialSubMenuSkills("position2", balancedstrike); 
     radialSubMenuSkills("position3", fury); 
     break; 
     case defend: 
     radialSubMenuSkills("position1", stonewall);  
     radialSubMenuSkills("position2", digin);  
     radialSubMenuSkills("position3", holdtheline); 
     break; 
     default: 
     console.log("radialSelector() has set its switch statement to default") 
    } 


    $('#upgradeSkillsBar').on('click', '#position1', function(){ 
     removeSkillButton(object); 
     addSkillButton(stonewall); 
     removeRadialSubMenu(); 
    }); 

} 
+1

質問が合理的な論理的順序になるように手配してください。 "*これは壊れた部分です" *は**の話ではなく**です。 – Amit

+0

あなたは、配列やオブジェクトやマップの配列を使うほうがよいでしょう。スイッチは、if、else、whileなどの条件付きです。 – zer00ne

答えて

1

ちょうど配列を使用します。

addSkillButton(Get Object in Position 1 from Case Number) 

はここに私のコードです。

var skills; 
switch(object) { 
    case strike: 
     skills = [deepcut, balancedstrike, fury]; 
     break; 
    case defend: 
     skills = [stonewall, digin, holdtheline]; 
     break; 
    default: 
     throw new Error("Invalid condition"); 
} 
for(var i=0, l=skills.length; i<l; i++) { 
    radialSubMenuSkills("position"+(i+1), skills[i]); 
} 
$("#upgradeSkillsBar").on("click", "#position1", function() { 
    removeSkillButton(object); 
    addSkillButton(skills[0]); 
    removeRadialSubMenu(); 
}); 
関連する問題