Задать вопрос
gatilin222
@gatilin222
Frontend-разработчик

Как сделать миксин для jade для меню с подпунктами?

Необходимо сделать минсин, чтобы он генерировался вот в такую разметку

  • Home
    • Sub Home
    • Some text
    • Another text
  • Sport
    • Sub Home
    • Some text
    • Another text
  • Products
    • Sub Home
    • Some text
    • Another text

    • Sub Home
    • Some text
    • Another text
    Mom
  • Вопрос задан
  • 3986 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    Фулстек-разработчик
    16 месяцев
    Далее
  • Javascript.ru
    Курс по Node.js
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Javascript.ru
    JavaScript/​ DOM/ ​Интерфейсы (для новичков)
    6 недель
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Яндекс Практикум
    Бэкенд на Node.js для фронтенд-разработчиков
    3 месяца
    Далее
Решения вопроса 1
@kamwork
На самом деле не сильно удобно из за того, что массив нужно выстроить в одну строку. Может кто еще подскажет решение.

- var newsList = [{name : 'Пункт 1', sub: ['Пункт 1.1', 'Пункт 1.2', 'Пункт 1.3', 'Пункт 1.4']}, {name : 'Пункт 2', sub: ['Пункт 2.1', 'Пункт 2.2', 'Пункт 2.3', 'Пункт 2.4']}]


each item in newsList
            li            
                a #{item.name}
                each subitem in item.sub
                    ul
                        li
                            a #{subitem}


Продолжил копаться и с миксинами получается красивее:

- var newsList = [{name : 'Пункт 1', sub: ['Пункт 1.1', 'Пункт 1.2', 'Пункт 1.3', 'Пункт 1.4']}] 
- var newsList2 = [{name : 'Пункт 2', sub: ['Пункт 2.1', 'Пункт 2.2', 'Пункт 2.3', 'Пункт 2.4']}]


mixin list(items)
            ul
                each item in items
                    li
                        a #{item.name}
                        each subitem in item.sub
                        ul
                            li
                                a #{subitem}


И вызываем миксины:

+list(newsList)
+list(newsList2)


Но наверное можно как то еще более красиво сделать
------------

Добавил:
- var menu = [item1, item2]
и

each item in menu
        +list(item)


Надеюсь кому то будет полезно
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@riwkus
Массив не обязательно выстраивать в 1 строку
- 
 var newsList = [
 {name : 'Пункт 1', sub: ['Пункт 1.1', 'Пункт 1.2', 'Пункт 1.3', 'Пункт 1.4']}, 
 {name : 'Пункт 2', sub: ['Пункт 2.1', 'Пункт 2.2', 'Пункт 2.3', 'Пункт 2.4']}]

или так
- var newsList = [
- {name : 'Пункт 1', sub: ['Пункт 1.1', 'Пункт 1.2', 'Пункт 1.3', 'Пункт 1.4']}, 
- {name : 'Пункт 2', sub: ['Пункт 2.1', 'Пункт 2.2', 'Пункт 2.3', 'Пункт 2.4']}]


В итоге первый вариант короче

each item in newsList
            li            
                a #{item.name}
                each subitem in item.sub
                    ul
                        li
                            a #{subitem}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы