2013-02-27 62 views
1

我想导入一个DB生成的变量少的文件,以供其他较少的文件使用。这将为我的应用程序提供一些高级别的变量。导入这些文件的最佳方法是什么?我已经尝试过类似@import "http://server.com/foo.less"而没有成功。如何生成动态LESS样式表?

文件看起来像:

@fontColor: #EEE; 
@fontSize: 10px; 

@fontColor: {{fontColor}} 
@fontSize: {{fontSize}} 

回答

1

你需要这样做使用url()“函数”

@import url("http://localhost/foo.less"); 

这将根据您的要求有多快被回答在编译时,这将会减慢的过程中导入较少的文件。 之后,此文件中的所有变量将可用于您当前的范围。 很可能,这也适用于mixins,但我没有测试。

0

生成假设你有机会获得server.com获取文件(我认为你这样做),你的道路是正确的(并且我假设它是这样),在我看来,需要纠正的一个错误是该文件应该看起来像(注意添加冒号):

@fontColor: #EEE; 
@fontSize: 10px; 

我不知道这是否意味着你需要改变你的生成代码:

@fontColor: {{fontColor}} 
@fontSize: {{fontSize}} 

我不是用双括号意味着什么{{...}}熟悉不够,但我认为是数据库是如何从中提取信息放入正在生成的.less文件中。如果是这样,那么在那里添加冒号应该可以解决LESS期望变量被定义的问题,并且可能解决您的问题。

+0

这不是我要找的。我并没有与产生更少的文件的问题,我希望能够导入服务器生成在我的设置较少的文件。 – Art 2013-02-28 03:28:33

+0

@arturnt:也许你需要澄清你的问题。我重读它,我想你问的是你如何可以是_not_该服务器上的其他文件少导入服务器生成的少文件?那是对的吗?如果是这样,我怀疑这是不可能的(尽管我还没有证实)。 – ScottS 2013-02-28 13:26:18

+0

这正是我问的:)。它可以位于同一台服务器上,但不能在本地文件系统上运行。 – Art 2013-03-01 20:50:31

2

使用Asp.net,您的服务器可以动态生成较少的文件。但我认为它也可以用其他技术。

的HomeController

// 
    // GET: /Home/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult StyleMeFromCshtml() 
    { 
     Response.ContentType = "text/css"; 
     return View(new StyleModel()); 
    } 

Index.cshtml

<!DOCTYPE html> 

<html> 
<head> 
    <title>test less</title> 
    <link rel="stylesheet/less" type="text/css" href="/Home/StyleMeFromCshtml" /> 
    <script src="~/Scripts/less-1.4.2.js"></script> 

</head> 
<body> 
    <div class="styleMeLess"> 
     I'm styled 
    </div> 
</body> 
</html> 

StyleModel.cs

public class StyleModel 
    { 
     public string BackgroundColor 
     { 
      get 
      { 
       // or get the value from the DB 
       var random = new Random(); 
       var toArgb = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)); 
       return toArgb.Name.Remove(6, 2); 
      } 
     } 
    } 

的StyleMeFromCshtml.cshtml较少在CSHTML伪装

@model lessTest.Models.StyleModel 

@{ 
    Layout = null; 
} 

.styleMeLess{ 
    background-color: #@Model.BackgroundColor 
} 

随着索引的每次调用,都会在服务器上生成随机颜色。但颜色值也可能来自数据库。诀窍是在响应中contentType被设置为“text/css”。

或者你直接返回较少的字符串:

 public ActionResult StyleMe() 
     { 
      var random = new Random(); 
      var toArgb = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)); 
      string style = String.Format(".styleMeLess{{ background-color: #{0} }}",  toArgb.Name.Remove(6,2)); 
      return Content(style, "text/css"); 
     }