2013-06-24 114 views
1

如何动态使用无点变量。我的意思是如何在无点文件中动态分配值。有什么办法吗?如何更改动态变量值

style.less文件包含

@url_image: 

#head{ background: url(@url_image) no-repeat left top white;} 

我如何分配在运行时的值?

回答

0

当你说在.less文件中动态更改时,我不确定为什么你只想在较少的文件中进行更改。如果只是在.less文件中进行更改,则必须编译该文件,以便将更改导航到style.min.css和style.css文件,而这些文件无法通过编程方式执行。

这是你可以做什么:

$('#head').css('background-image', "url("new-source"); 

所以jQuery的/ JavaScript是你最好的选择

+0

我们可以使用这里的解析方法。如果可以的话该怎么办?请给我提供帮助。 –

+0

解析方法是什么意思?你想解析什么?请澄清,乐意提供帮助。 – Ani

+0

是解析。谢谢。我们怎样才能解析?实际上这是要求。 –

0

这可以,如果你手工解析和输出带点文件来完成。

var config = DotlessConfiguration.GetDefaultWeb(); 
config.DisableVariableRedefines = true; 

string less = File.ReadAllText(fileName); 
StringBuilder sb = new StringBuilder(less); 
sb.AppendLine(string.Format("{0}: {1};", "@url_image", "image.jpg")); 

return LessWeb.Parse(sb.ToString(), config); 
1

有很多方法可以做到这一点。就我而言,内容和动态参数都存储在数据库中。你可以做这样的事情,如果你想改变一个十六进制代码的颜色,例如:

var parser = new dotless.Core.Parser.Parser(); 
var env = new dotless.Core.Parser.Infrastructure.Env { Compress = true, Debug = true, KeepFirstSpecialComment = false, DisableVariableRedefines = false }; 
var tree = parser.Parse(css.Detail.Text, null); 

foreach (var key in layout.LessDetails.CurrentValues.Keys) 
{ 
    var rule = tree.Variable("@" + key, tree); 

    if (rule != null) 
    { 
     string value = layout.LessDetails.CurrentValues[key]; 

     if (value != null && value.StartsWith("#")) 
     { 
     rule.Value = new dotless.Core.Parser.Tree.Color(value.TrimStart('#')); 
     } 
    } 
} 

css.Detail.GeneratedText = tree.ToCSS(env); 

,因为有许多其他类型的参数,这不是一个结束所有的解决方案,但它应该引领你在正确的方向。查看dotless.Core.Parser.Functions,获取有关各种选项的有用信息。

或者,还有另一个简单的选项。使用上面的代码,您可以简单地将更改后的变量追加到css.Detail.Text字符串的末尾。实际上,这是modifyVars方法在less.js文件中的工作原理。通过在最后再次添加参数,它将覆盖之前的设置值。