【问题标题】:how to change value dynamically variable如何动态改变值变量
【发布时间】:2013-10-22 12:17:34
【问题描述】:

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

style.less 文件包含

@url_image: 

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

如何在运行时赋值?

【问题讨论】:

    标签: dotless


    【解决方案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 字符串的末尾。这实际上是在 less.js 文件中 modifyVars 方法的工作方式。通过在末尾再次添加参数,它会覆盖之前的设置值。

    【讨论】:

      【解决方案2】:

      当您说在 .less 文件中动态更改时,我不确定您为什么只想在 less 文件中进行更改。如果您只是在 .less 文件中更改它,则必须编译该文件才能导航到 style.min.css 和 style.css 文件的更改,而您无法以编程方式进行。

      这是你可以做的:

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

      所以 jquery/javascript 是你最好的选择

      【讨论】:

      • 我们可以使用这里的解析方法吗?如果可以的话怎么办?请为我提供帮助。
      • 解析方法是什么意思?你想解析什么?请澄清,很乐意提供帮助。
      • 是解析。谢谢。我们如何处理 parse ?实际上这是要求。
      • 我完全不知道你在问什么......你能举个例子吗?
      • 我可以解析 .less 文件中的一些参数值吗?任何其他替代方式都可以接受以使其动态化。实际上我有数据库我想根据用户更改颜色值我该怎么做。
      【解决方案3】:

      如果你手动解析并输出无点文件就可以做到这一点。

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-24
        • 2016-12-20
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        相关资源
        最近更新 更多