2011-08-15 10 views
2

我使用jQuery模板來標記我的JSON。我想知道是否有人有一個優雅的解決方案,將它們預編譯爲服務器上的JavaScript,以防止瀏覽器每次都這樣做。如何預編譯.Net中的jQuery模板?

我知道以下職位:

pre-compile JavaScript templates to functions on project build

,我知道,我可以用

https://github.com/wookiehangover/jquery-tmpl-jst

,但我希望有一些更優雅。例如,如何設置一個HttpModule來處理* .jst文件的請求,並編譯它並返回生成的JS。

我不確定這是否存在,但假設如果可以讓jquery-tmpl-jst項目運行serverside,那麼構建HttpModule似乎相當容易。

任何幫助表示讚賞。如果模塊不存在,我會考慮編寫它,如果我能理清如何讓實際的編譯工作。

UPDATE

我剛剛發現這個庫。它不是一個HttpModule,但它看起來像它實現了jQuery模板編譯serverside。只是不確定它是否完全實施或尚未完成。

https://github.com/awhatley/jquery-tmpl.net

UPDATE

那麼它看起來像上面的庫實際上是在.NET中的服務器上執行jQuery的模板,所以它從來沒有得到的JavaScript對jQuery編譯格式。有任何想法嗎?

回答

3

第一個選項是使用Cassette.Web(See documentation,get it with NuGet)。考慮到它會爲您的項目添加大約6個依賴包。我們並不需要所有這些額外的東西,所以我們決定以提取所需的部分,這是一個非常簡單的任務:

所以第二個選項

  1. 獲取.NET一些JS引擎(我們使用Jurassic as Cassette.Web did)
  2. Download JS extract from jQuery-tmpl plugin用於Cassette.Web。
  3. 在JS引擎中執行下載的JS文件。
  4. 在JS引擎中執行「buildTmplFn」JS函數傳遞給你的模板作爲參數
  5. 哇哇,獲取一個編譯模板作爲返回值。

實施例:

using Jurassic; 
... 
private static string CompileTemplates(string sourceDirectory) 
{ 
    var resultBuilder = new StringBuilder(); 
    var scriptEngine = new ScriptEngine(); 

    scriptEngine.Execute(Properties.Resources.jqueryTmplCompiler); 

    var templates = Directory.GetFiles(sourceDirectory, "*.htm?"); 
    if(templates.Count() > 0) 
    { 
     foreach (var filePath in templates) 
     { 
      Console.WriteLine("Compiling " + Path.GetFileName(filePath)); 
      string templateText = File.ReadAllText(filePath); 
      string templateName = Path.GetFileNameWithoutExtension(filePath); 
      string precompiledTemplate = scriptEngine.CallGlobalFunction<string>("buildTmplFn", templateText); 
      resultBuilder.AppendFormat("$.template('{0}', {1});\n", templateName, precompiledTemplate); 
     } 
     Console.WriteLine("Templates successfully precompiled."); 
    } 
    else 
    { 
     ErrorExit("No templates found in Source Directory " + sourceDirectory); 
    } 

    return resultBuilder.ToString(); 
} 

這個例子假設在第二步驟中下載的JS文件存儲在當前項目的資源。

乾杯

+0

優秀。這正是我所期待的。 –