Как выполнить защиту LESS, если логическое значение неверно?

embeddable — это пользовательская функция LESS PHP, которая возвращает логическое значение.

Я могу что-то сделать с защитой LESS (lessphp), когда логическая функция возвращает true:

.my-mixin(@url) when(embeddable(@url)) {
    background-color: #abc;
}

.smallClass {
    .my-mixin('small.png');
}

Это дает:

.smallClass {
    background-color: #abc;
}

как и ожидалось.

Как мне это сделать, если это не правда (не оператор). Очевидное:

.my-mixin(@url) when(embeddable(@url)) {
        background-color: #abc;
}

.my-mixin(@url) when(not(embeddable(@url))) {
        background-color: #389;
}

.bigClass {
        .my-mixin('big.png');
}

молча сбрасывается вместе с блоком, использующим его. Обратите внимание, я сохранил истинную версию сторожа, поэтому в случае неправильного предиката следует использовать истинную версию. Затем я попытался:

.my-mixin(@url) when(!embeddable(@url)) {
    background-color: #389;
}

вместо не версии.

Миксин просто сохраняется в CSS (а не компилируется), а блок bigClass, который пытается его использовать, по-прежнему молча удаляется.

То же самое с:

.my-mixin(@url) when(embeddable(@url) != true) {
        background-color: #389;
}

person Matthew Flaschen    schedule 20.09.2013    source источник
comment
Я не совсем о lessphp (не могу протестировать его прямо сейчас), но в less.js when(not(embeddable(@url))) это неправильный синтаксис, приводящий к ошибке. Вместо этого попробуйте when not(embeddable(@url))...   -  person seven-phases-max    schedule 20.09.2013


Ответы (1)


Правильный синтаксис LESS

Обратите внимание на изменение ниже в вашем коде версии not:

.my-mixin(@url) when (embeddable(@url)) {
        background-color: #abc;
}

.my-mixin(@url) when not (embeddable(@url)) {
        background-color: #389;
}

.bigClass {
        .my-mixin('big.png');
}

Осторожность

Согласно сайтуlesscss.org, "ключевое слово true единственная истинная ценность», что может несколько сбивать с толку. В вашем примере это означает, что функция PHP должна вернуть значение true, чтобы получить попадание в миксин true, а все остальное будет ложным. Если бы вы передали 1 (часто считается истинным в языках программирования) или даже если бы вы передали из вашего примера 'big.png', это не соответствовало бы истине, поэтому графически (как если бы значение было передано) это результаты различных пройденные комбинации:

.my-mixin('big.png') when (true) <-- evaluates to TRUE
.my-mixin('big.png') when (1) <-- evaluates to FALSE
.my-mixin('big.png') when ('big.png') <-- evaluates to FALSE (most confusing)
.my-mixin('big.png') when ('true') <-- evaluates to FALSE (as it is a string)

Для дальнейшего обсуждения этого «правдивого» аспекта LESS см. этот ТАК ответ.

person ScottS    schedule 20.09.2013