2011-08-15 8 views
2

jQueryテンプレートを使用してJSONをマークアップしています。私は誰もブラウザ上で毎回そうしなければならないようにサーバー上のjavascriptにプリコンパイルするための洗練されたソリューションを持っているのだろうかと思っています。.NETでjQueryテンプレートをどのようにプリコンパイルしますか?

は、私は次のポストを認識しています:

pre-compile JavaScript templates to functions on project build

と私は

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

使用できることを理解し、私はよりエレガントなものがあることを期待しています。たとえば、* .jstファイルの要求を処理するように設定され、コンパイルして結果のJSを返すHttpModuleについて考えてみましょう。

これがまだ存在するかどうかはわかりませんが、サーバ側を実行するためにjquery-tmpl-jstプロジェクトを取得できるとすれば、HttpModuleを構築するのはかなり簡単です。

何か助けていただければ幸いです。モジュールが存在しない場合は、実際のコンパイルの仕組みを整理することができれば、それを書くことを検討します。

UPDATE

私はこのライブラリを見つけました。これはHttpModuleではありませんが、サーバーサイドをコンパイルするjQueryテンプレートを実装しているようです。完全に実装されているかどうかは不明です。

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

UPDATE

それはjQueryのコンパイル形式にはJavaScriptを取得したことがないので、上記のライブラリーは、実際に.NETのサーバー上でjQueryのテンプレートを実行しているようにまあそれが見えます。何か案は?

答えて

3

最初のオプションはCassette.Web(See documentationget it with NuGet)を使用することです。約6つの依存パッケージをプロジェクトに追加することも考慮に入れてください。私たちが必要な部分を抽出することを決定し、それは非常に簡単な作業だったように、我々はすべて、この追加のものを必要としませんでした:

ので番目のオプション

  1. である(我々が使用し、.NETのためのいくつかのJSエンジンを取得します。 Jurassic as CassetteWeb did)
  2. Download JS extract from jQuery-tmpl plugin Cassette.Webで使用されています。
  3. ダウンロードしたJSファイルをJSエンジンで実行します。
  4. JSエンジンで "buildTmplFn" JS関数を実行し、引数としてテンプレートを渡します。
  5. Whoa-la、コンパイル済みのテンプレートを戻り値として取得します。

例:

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

優れています。これはまさに私が探していたものです。 –

関連する問題