2017-01-01 8 views
2

Вот вареное вниз вариант того, что я пытаюсь выполнить:Использование мопс Mixin результат в качестве значения атрибута

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

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

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

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

ответ

2

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

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

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

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

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

Объяснение

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

Однолинейная

-var foo = "bar"; 

многоканальная линия

- 
    function randomNumber() { 
     return 4; 
    } 

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

+0

Спасибо! Это то, что я и попытался изначально, но WebStorm бросил синтаксические ошибки на любых блоках небуферизованного кода длиннее одной строки с фигурными скобками. Теперь я вижу, что это действительно допустимый синтаксис, что компилятор pug принимает только отлично. Скорее всего, это проблема в плагине Jetbrains (аналогично этой [проблеме] (https://youtrack.jetbrains.com/issue/WEB-16966), которая была отправлена ​​на их трекер по проблеме). – gandreadis