To działa:
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;
}
Poprzednia wersja tej odpowiedzi uważała nawiasy za winowajcę. Prawdę mówiąc, nawiasy nie mają tu znaczenia - jedyne, co jest potrzebne, to switch(true){...}
aby wyrażenia przypadków były obliczane na wartości logiczne.
Działa, ponieważ wartość, którą podajemy przełącznikowi, jest używana jako podstawa do porównania. W konsekwencji wyrażenia przypadków, również obliczane na wartości logiczne, określają, który przypadek jest uruchamiany. Mógłby to również odwrócić i przekazać switch(false){..}
i sprawić, że pożądane wyrażenia zostaną ocenione na fałsz zamiast na prawdę, ale osobiście wolę radzić sobie z warunkami, które oceniają prawdziwość. Jednak to też działa, więc warto pamiętać, aby zrozumieć, co robi.
Np .: jeśli liCount wynosi 3, pierwsze porównanie jest true === (liCount == 0)
, co oznacza, że pierwszy przypadek jest fałszywy. Przełącznik przechodzi następnie do następnej sprawy true === (liCount<=5 && liCount>0)
. To wyrażenie zwraca wartość true, co oznacza, że ten przypadek jest uruchamiany i kończy się na break
. Dodałem tutaj nawiasy, aby było jaśniej, ale są one opcjonalne, w zależności od złożoności Twojego wyrażenia.
Jest to dość proste i zgrabny sposób (jeśli pasuje do tego, co próbujesz zrobić) radzenia sobie z długą serią warunków, w których być może długa seria ìf() ... else if() ... else if () ...
może wprowadzić dużo wizualnego szumu lub kruchości.
Używaj ostrożnie, ponieważ jest to niestandardowy wzorzec, mimo że jest prawidłowym kodem.