Das funktioniert:
switch (true) {
case liCount == 0:
setLayoutState('start');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount<=5 && liCount>0:
setLayoutState('upload1Row');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount<=10 && liCount>5:
setLayoutState('upload2Rows');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount>10:
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
}
In einer früheren Version dieser Antwort wurden die Klammern als Schuldige angesehen. In Wahrheit sind die Klammern hier irrelevant - das einzige, was notwendig ist, ist, switch(true){...}
dass Ihre Fallausdrücke zu Booleschen Werten ausgewertet werden.
Es funktioniert, weil der Wert, den wir dem Schalter geben, als Grundlage für den Vergleich verwendet wird. Folglich bestimmen die Fallausdrücke, die auch nach Booleschen Werten ausgewertet werden, welcher Fall ausgeführt wird. Könnte dies auch umkehren und bestehen switch(false){..}
und die gewünschten Ausdrücke als falsch anstatt als wahr bewerten lassen. Ich persönlich bevorzuge es jedoch, mit Bedingungen umzugehen, die als wahrheitsgetreu bewertet werden. Es funktioniert jedoch auch, daher sollten Sie bedenken, um zu verstehen, was es tut.
Beispiel: Wenn liCount 3 ist, ist der erste Vergleich true === (liCount == 0)
, was bedeutet, dass der erste Fall falsch ist. Der Schalter fährt dann mit dem nächsten Fall fort true === (liCount<=5 && liCount>0)
. Dieser Ausdruck wird als wahr ausgewertet, was bedeutet, dass dieser Fall ausgeführt wird und am endet break
. Ich habe hier Klammern hinzugefügt, um es klarer zu machen, aber sie sind optional, abhängig von der Komplexität Ihres Ausdrucks.
Es ist ziemlich einfach und eine gute Möglichkeit (wenn es zu dem passt, was Sie versuchen), mit einer langen Reihe von Bedingungen umzugehen, bei denen eine lange Reihe von ìf() ... else if() ... else if () ...
möglicherweise viel visuelles Rauschen oder Zerbrechlichkeit mit sich bringt.
Seien Sie vorsichtig, da es sich trotz gültigen Codes um ein nicht standardmäßiges Muster handelt.