2013-02-27 79 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"); 
     }