Используйте результат pug mixin в качестве значения атрибута

Вот упрощенная версия того, что я пытаюсь достичь:

mixin foo(bar)
    = bar + ".html"

a(href= +foo("baz")) test

Я хотел бы, чтобы тег привязки был скомпилирован как <a href="baz.html">test</a>Но вместо этого я получаю ошибки типа foo не будучи функцией. Хотя я вижу, что технически это не функция, разве это не сценарий, в котором миксин был бы полезен? Я искал в документации по мопсу сценарии использования, похожие на мои, но безуспешно.

Возможно ли здесь то, чего я пытаюсь достичь с помощью миксинов? Или это возможно только с обычными функциями JS, передаваемыми в качестве переменных контекста?

2 ответа

Решение

Я думаю, что вы хотите использовать небуферизованный Javascript для этого. Для вашего случая использования код будет таким.

-
    function foo(bar) {
        return bar + ".html";
    }

a(href=foo("baz")) test

Это приведет к следующему HTML:

<a href="baz.html">test</a>

объяснение

Небуферизованный Javascript - это логика шаблона, которая не будет генерироваться в конечном результате. Небуферизованный Javascript помечается тире (-). Многострочный небуферизованный Javascript определяется дефисом с отступом в одну вкладку.

Одна линия

-var foo = "bar"; 

Мульти линия

-
    function randomNumber() {
        return 4;
    }

Документация: https://pugjs.org/language/code.html

Просто передаю пример с использованием миксинов:

Определение

      mixin aLink(href, name)
    a(href=href)&attributes(attributes)= name

Применение

      +aLink('https://stackoverflow.com/', 'Stack Overflow')(class='text-orange')
Другие вопросы по тегам