我扩展了默认的 less 函数以支持一些基本列表。我添加了一个函数'nth',如下所示:
"nth": function(obj, index){
var list = obj.value.split(",");
var n = index.value;
obj.value = list[n-1].trim();
return new tree.Anonymous(obj);
}
然后我添加了另一个函数“convertstrtovar”,如下所示:
convertstrtovar: function(obj){
var str = obj.value.toString();
str = str.replace(/(@)/gi, '');
str = '~"@{' + str + '}"';
obj.value = str;
return new tree.Anonymous(obj);
}
这会接收像 '@white' 这样的字符串并将其转换为 ~"@{white}"。下面给出了 less mixin 的示例代码。
@button-text-colors: "@white, @dark, @red"; //parsed as a comma separated list.
@white: white;
@dark: black;
@red: red;
.something(@color){
color: @color;
}
.some{
@t: convertstrtovar(nth(@button-text-colors, 1));
.something(@t);
}
这给了我如下输出:
.some {
color: ~"@{white}";
}
为什么 ~"@{white}" 被打印为字符串,而不是作为变量 white 而通常 ~"@{white}" in less 获取存储在 @white 中的值?