Це працює:
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;
}
Попередня версія цієї відповіді вважала винними дужки. По правді кажучи, дужки тут не мають значення - єдине, що потрібно, так switch(true){...}
і для виразів вашого випадку оцінити булеві значення.
Це працює, оскільки значення, яке ми надаємо комутатору, використовується як основа для порівняння. Отже, вирази регістру, які також обчислюють логічні значення, визначатимуть, який випадок буде запущено. Можна також перевернути це, і передати, switch(false){..}
і бажані вирази оцінити як false, а не true .. але особисто волію мати справу з умовами, які оцінюють як істинність. Однак він теж працює, тому варто пам’ятати, щоб зрозуміти, що він робить.
Наприклад: якщо liCount дорівнює 3, перше порівняння - це true === (liCount == 0)
означає, що перший випадок хибний. Потім перемикач переходить до наступного корпусу true === (liCount<=5 && liCount>0)
. Цей вираз має значення true, тобто цей випадок запущений і закінчується на break
. Я додав тут дужки, щоб зробити це зрозумілішим, але вони не є обов’язковими, залежно від складності вашого виразу.
Це досить простий і акуратний спосіб (якщо це відповідає тому, що ви намагаєтесь зробити) для обробки довгої серії умов, де, можливо, довга серія ìf() ... else if() ... else if () ...
може створити багато візуального шуму або крихкості.
Використовуйте з обережністю, оскільки це нестандартний шаблон, незважаючи на дійсний код.