2013-06-24 5 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

Это может быть сделано, если вы вручную анализировать и выводить файл Dotless.

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. Снова добавив параметры в конце, он отменяет предыдущие установленные значения.