2013-08-24 8 views
12

Ist es möglich, eine LESS-Variable auf einen bestimmten Wert zu setzen, wenn sie nicht definiert wurde? es stellt sich heraus, dass die Notwendigkeit für einen solchen Trick geschieht sehr oft ein XY-Problem zu sein (als Ergebnis von weniger variable Semantik Missverständnis):LESS-Variable setzen, wenn sie nicht gesetzt ist

Ich kann nur solutions for SASS.

Antwort

7

Eine wichtige Bemerkung zu finden scheinen. Normalerweise gibt es keine echten Anwendungsfälle, in denen Sie das wirklich wollen (in Less Sie stattdessen immer definieren Sie einen Standardwert (so dass es einfach immer vorhanden ist) nach Belieben außer Kraft gesetzt werden). Bevor Sie den Trick anwenden, stellen Sie sicher, dass es nicht something else you want actually ist.


Es ist ganz einfach (da v1.4.0), wenn Sie eine solche Variable für den gleichen Umfang (zB global oder lokal), wo es bereits definiert werden könnten zur Verfügung stellen müssen:

@bar: 41; // comment/uncomment to test 

.define-bar-if-not-defined() {@bar: 42} 
.define-bar-if-not-defined(); // exposes a variable only if it's not already in this scope 

#using-global-bar { 
    global-bar: @bar; 
} 

#using-local-bar { 
    @bar: 43; // comment/uncomment to test 
    .define-bar-if-not-defined(); 

    local-bar: @bar; 
} 

Doch diese Methode funktioniert nicht, wenn Sie versuchen, sie für globale/übergeordnete Bereichsvariablen zu verwenden, die im lokalen Bereich verwendet werden (und dies kann ein Problem sein, wenn Sie eine generische Methode benötigen, wenn Sie nicht sicher sind, aus welchem ​​Bereich die ursprüngliche Variable möglicherweise stammt) :

#using-unknown-bar-in-local-scope { 
    // ... some code ... 

    .define-bar-if-not-defined(); // won't override local @bar (if any) but always overrides global and parent scope @bar 

    bar: @bar; 
} 

In diesem Fall kenne ich keine einfache Lösung (ohne einige Inline-JavaScript-Hacks, die man beispielsweise im Guard-Ausdruck verwenden könnte)

+0

Aus irgendeinem Grund funktioniert diese Methode nicht, wenn die Variable in einem @ verwendet wird. Zeichenfolge importieren Je weniger Compilerfehler die Variable nicht definiert ist, auch wenn Sie sie in Stildefinitionen verwenden können. – cameronhimself

+0

@cameronhimself Dies wird erwartet, da Importe vor Mixins ausgewertet werden. Wie auch immer, bisher habe ich keinen Anwendungsfall gesehen, in dem eine solche Funktionalität überhaupt notwendig wäre (ich habe die Frage nur als hypothetisch beantwortet). Jede Anfrage nach einer solchen Einrichtung wird in der Regel zu einem Ergebnis von Missverständnissen, wie Less-Variablen im Allgemeinen funktionieren (daher ist es ein "XY-Problem", siehe [# 1400] (https://github.com/less/less). js/issues/1400), [# 1706] (https://github.com/less/less.js/issues/1706) und so weiter). –

+0

@cameronhimself Mit anderen Worten, wenn Sie einen bestimmten Anwendungsfall haben, wo Sie denken, dass Sie diese Art von Trick brauchen - posten Sie es - ich bin ziemlich sicher, dass es mit solchen Hacks in viel einfacherer Weise gelöst werden kann. –

Verwandte Themen