как изменить значение динамической переменной

как использовать динамические переменные без точек. Я имею в виду, как динамически присваивать значение в файле без точек. Там в любом случае?

файл style.less содержит

@url_image: 

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

Как я могу присвоить значение во время выполнения?


person sumesh gaud    schedule 24.06.2013    source источник


Ответы (3)


Когда вы говорите о динамическом изменении в файле .less, я не уверен, почему вы хотите просто изменить его в меньшем файле. Если вы просто измените его в файле .less, вам придется скомпилировать файл, чтобы внести изменения в файлы style.min.css и style.css, что вы не можете сделать программно.

Вот что вы можете сделать:

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

Так что jquery/javascript - ваш лучший выбор

person Ani    schedule 24.06.2013
comment
мы можем использовать здесь метод синтаксического анализа. если можно то как сделать? пожалуйста, окажите мне помощь. - person sumesh gaud; 24.06.2013
comment
Что вы подразумеваете под методом разбора? Что ты хочешь разобрать? Уточните, пожалуйста, рад помочь. - person Ani; 24.06.2013
comment
да разбирать. Благодарю. как мы можем сделать с разбором? на самом деле это требование. - person sumesh gaud; 24.06.2013
comment
Я совершенно не понимаю, о чем вы спрашиваете... можете привести пример? - person Ani; 24.06.2013
comment
могу ли я проанализировать значения некоторых параметров в файле .less, любой другой альтернативный способ будет приемлемым, чтобы сделать его динамическим. на самом деле у меня есть база данных, я хочу изменить значение цвета в соответствии с пользователями, как я могу это сделать. - person sumesh gaud; 24.06.2013
comment
Нет, вы не можете передавать параметры в файлы .less. Лучше всего использовать jquery или любой серверный язык и перезаписать фон - person Ani; 24.06.2013
comment
можем ли мы перезаписать существующий css языком сервера, то как мы можем? - person sumesh gaud; 24.06.2013
comment
@sumeshgaud и Ани Вы говорите не об одном и том же. Сумеш говорит о без точек и не меньше.js. jQuery никак не помогает ему, поскольку он пытается манипулировать переменными, анализируемыми на стороне сервера. - person Jacob T. Nielsen; 24.07.2013

Есть несколько способов сделать это. В моем случае в БД хранится как меньшее содержание, так и динамические параметры. Вы можете сделать что-то подобное, если хотите изменить цвет шестнадцатеричного кода, например:

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

person uadrive    schedule 21.10.2013

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

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);
person Jacob T. Nielsen    schedule 24.07.2013