2015-06-02 54 views
0

在回答this topic中顯示瞭如何使用BundleTransformer爲LESS和LessTranslator傳遞變量到LESS文件。不幸在SASS類的BundleTransformer中沒有可用的屬性GlobalVariables。可以用自定義變量(顏色值)編譯SASS文件取決於登錄用戶嗎?在ASP.NET MVC中使用自定義值變量SASS

回答

1

我沒有使用SASS擴展,所以我不能說一定的,但你總是可以創建一個自定義的包轉換來取代本質上是'模板'文件。

所以,你可以有聲明,像這樣

$variable: {{variable-placeholder}}; 

然後使用類似下面的替換值的東西變量SASS文件。

public class ReplacePlaceholdersBundleTransform : IBundleTransform 
{ 
    private readonly IDictionary<string, string> _replacements; 

    public ReplacePlaceholdersBundleTransform() 
    { 
     _replacements = new Dictionary<string, string>(); 
    } 

    public ReplacePlaceholdersBundleTransform(IDictionary<string,string> replacements) 
    { 
     _replacements = replacements ?? new Dictionary<string,string>(); 
    } 

    public void Process(BundleContext context, BundleResponse response) 
    { 
     if (_replacements.IsNullOrEmpty()) 
      return; 

     foreach (var replacement in _replacements) 
     { 
      response.Content = response.Content.Replace(replacement.Key, replacement.Value); 
     } 
    } 
} 

要使用它添加了轉換到包。

yourBundle.Transforms.Add(
      new ReplacePlaceholdersBundleTransform(new Dictionary<string, Func<BundleContext, string>> 
      { 
       {"{{variable-placeholder}}", "red}, 
      })); 

我們用於腳本類似的東西轉換到捆綁的URL注入腳本文件在運行時獲得通過優化框架生成完整的URL。如果在SASS翻譯發生後執行轉換,這肯定可能不適用於你,但是,我沒有時間啓動SASS項目來測試它。

我希望這會有所幫助。

+0

看着[這個問題](http://stackoverflow.com/questions/16283537/what-is-the-proper-use-of-iitemtransform-for-correcting-paths-in-css-bundling-wi)你可能會適應這個使用IItemTransform來限制替換範圍到一個單一的文件,我還沒有嘗試過,但它是值得調查,如果上述不起作用。 – benembery

+0

你好,謝謝你的回覆。在我的情況下,問題是我沒有單一的.scss文件,但有很多導入文件,我想要替換的變量位於導入文件中。你知道如何在替換之前合併所有文件嗎? – cadi2108

+0

我移動變量來修改主文件,現在內容被替換。但是,像你在這裏涉及的問題,我的修改被忽略。 – cadi2108