less.jsでは、JavaScript 補間 (バックティックを使用) を利用できます。そして、ファイルから変数を使用してjsonオブジェクトをロードする関数を呼び出します...そこからキーで変数を抽出できます-おそらくこの方向の何か:
@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')`;
}
これは非常にエレガントに見えないかもしれませんが、機能します。よりエレガントなオプションは、スクリプトを呼び出す前に、グローバル LESS オブジェクトでカスタム ユーザー関数を定義することでしょう。
あなたができるもう1つのことは、(ブラウザでLESSスクリプトを呼び出した後)javascriptでjsonファイルをロードし、less.modifyVars()
関数を使用してjson変数でLESSを再コンパイルすることです。HTML で次の行に沿って何かを行うことができます (ここではプレーンな JS を使用していますが、jQuery.getJSON を使用するとさらに簡単になります)。
<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>
そして、LESS スタイル ファイルに次のようなものを記述します。
@color1: darkblue; //default value - will get overwritten by .modifyVars()
body {
background-color: @color1;
}
別の注意: LESS のすべての変数名は、アットマーク ( @
) で始める必要があります。ただし、変数の先頭にif missingless.modifyVars()
が自動的に追加されるため、json 変数は必要ありません。@
これがあなたにいくつかのアイデアを与えることを願っています。それを行うためのより良い方法があるかもしれません...しかし、この2つのアプローチは私にとってうまくいきました。