Директива s:unless представляет собой условную
конструкцию, противоположную s:if. Она позволяет выполнять
рендеринг элементов только тогда, когда заданное условие
ложно. Это полезно для случаев, когда необходимо скрыть
контент при выполнении определённого условия, без необходимости
инвертировать логику в выражении.
<div s:unless="условие">
Контент отображается, если условие ложно
</div>
условие — это любое выражение JavaScript, возвращающее
булево значение.false, элемент рендерится в
DOM.true, элемент не
отображается.Примеры:
<div s:unless="isLoggedIn">
Пожалуйста, войдите в систему, чтобы продолжить.
</div>
В этом примере <div> отображается только если
переменная isLoggedIn имеет значение false или
undefined.
В Slim.js s:unless можно применять с методами объекта
компонента или вычисляемыми свойствами:
class UserPanel extends Slim {
constructor() {
super();
this.loggedIn = false;
}
isGuest() {
return !this.loggedIn;
}
}
customElements.define('user-panel', UserPanel);
<user-panel>
<div s:unless="isGuest()">
Контент для авторизованных пользователей
</div>
</user-panel>
Метод isGuest() возвращает булево значение, и
s:unless использует его для управления рендерингом. Элемент
отобразится только если пользователь не гость.
s:forДирективу s:unless можно комбинировать с
s:for для фильтрации элементов массива без создания
дополнительных функций фильтрации:
class TaskList extends Slim {
constructor() {
super();
this.tasks = [
{ name: 'Сделать домашнее задание', completed: false },
{ name: 'Прочитать книгу', completed: true }
];
}
}
customElements.define('task-list', TaskList);
<ul>
<li s:for="task in tasks" s:unless="task.completed">
{{task.name}}
</li>
</ul>
В этом примере в список попадут только незавершённые задачи.
s:unless проверяет свойство completed каждого
объекта массива.
s:unless может быть вложена в другие директивы
s:if, s:for или другие s:unless,
что позволяет создавать сложные условные блоки:
<div s:if="showPanel">
<div s:unless="isAdmin">
Контент для обычных пользователей
</div>
</div>
showPanel
истинно.isAdmin
ложь.s:unless не поддерживает логические операторы
прямо в атрибуте сложного вида без обёртки в метод или
вычисляемое свойство. Например, выражение
s:unless="!isLoggedIn || isAdmin" лучше вынести в отдельный
метод, чтобы избежать ошибок рендеринга.{{}}, чтобы динамически изменять контент внутри блока.s:unless.s:for рекомендуется использовать
уникальные ключи элементов для оптимизации рендеринга.s:unless помогают создавать более
декларативный и чистый код без лишних if в JavaScript.class Dashboard extends Slim {
constructor() {
super();
this.user = { name: 'Иван', admin: false };
this.showNotifications = true;
}
isRegularUser() {
return !this.user.admin;
}
}
customElements.define('app-dashboard', Dashboard);
<app-dashboard>
<div s:unless="isRegularUser()">
Панель администратора
</div>
<div s:unless="!showNotifications">
Уведомления
</div>
</app-dashboard>
s:unless
обеспечивает гибкую и понятную логику рендеринга.