In less.js Sie die Verwendung von Javascript-Interpolation (mit den Back-Ticks) machen. Und rufen Sie eine Funktion, die das JSON-Objekt mit den Variablen aus der Datei geladen ... von dem Sie die Variable durch ihren Schlüssel extrahieren können - etwas in diese Richtung vielleicht:
@json_file: myvars.json;
@json: ~`json = function($key) { var request = new XMLHttpRequest(); request.open("GET", "@{json_file}", false); request.send(null); var my_json = JSON.parse(request.responseText); return my_json[$key]; }`;
body {
background-color: ~`json('color1')`;
}
könnte dies nicht super elegant aussehen, aber Es klappt. Eine elegantere Möglichkeit wäre wahrscheinlich die benutzerdefinierte Funktion in den global LESS object before calling the script zu definieren, aber ich störte nie wirklich damit spielen, wie ich sich immer WENIGER clientseitige gerade in Entwicklung benutze.
Eine andere Sache, die Sie tun können - lädt die JSON-Datei in Javascript (nach dem Aufruf der LESS-Skript im Browser) und mit der less.modifyVars()
Funktion, LESS mit den Json-Variablen neu zu kompilieren. Sie können entlang dieser Linien in Ihrem HTML etwas tun (ich hier Ebene JS verwenden, aber es ist auch einfacher, wenn Sie jQuery.getJSON verwenden):
<link rel="stylesheet/less" href="style.less" type="text/css">
<script type="text/javascript">less = { env: "development" };</script>
<script src="http://rawgithub.com/less/less.js/master/dist/less-1.4.1.min.js" ></script>
<script type="text/javascript">
var request = new XMLHttpRequest();
request.open("GET", "myvars.json", false);
request.send(null);
var my_json = JSON.parse(request.responseText);
less.modifyVars(my_json);
</script>
und so etwas in Ihrer WENIGER Stil-Datei:
@color1: darkblue; //default value - will get overwritten by .modifyVars()
body {
background-color: @color1;
}
Ein weiterer Hinweis: Alle Variablennamen in LESS müssen mit einem unter Zeichen (@
) beginnen. Allerdings müssen die json Variablen nicht zu, weil less.modifyVars()
automatisch die Variablen mit einem @
, wenn sie fehlt prepends.
Hoffe, das gibt Ihnen einige Ideen. Es könnte bessere Wege geben, es zu tun ... aber diese zwei Ansätze funktionierten für mich.