Как вы прекомпилируете шаблоны jQuery в .Net? - PullRequest
2 голосов
/ 15 августа 2011

Я использую шаблоны jQuery для разметки моего JSON.Мне интересно, есть ли у кого-нибудь элегантное решение для предварительной компиляции их в javascript на сервере, чтобы браузер не делал это каждый раз.

Мне известно следующее сообщение:

предварительно скомпилировать шаблоны JavaScript для функций при сборке проекта

, и я понимаю, что могу использовать

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

, но я надеюсь, чтоесть что-то более элегантное.Например, как насчет HttpModule, который может быть настроен на обработку запроса для файлов * .jst, который скомпилирует его и вернет полученный JS.

Я не уверен, существует ли он еще, но при условии, что одинможет заставить проект jquery-tmpl-jst работать на сервере, кажется, довольно просто собрать HttpModule.

Любая помощь приветствуется.Если модуль не существует, я рассмотрю его написание, если смогу разобраться, как заставить работать фактическую компиляцию.

ОБНОВЛЕНИЕ

Я только что нашел этобиблиотека.Это не HttpModule, но, похоже, он реализует шаблон jQuery, компилирующий сервер.Просто не уверен, полностью ли он реализован или нет.

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

ОБНОВЛЕНИЕ

Что ж, похоже, что библиотека выше действительно выполняетШаблоны jQuery на сервере в .Net, поэтому он никогда не получает javascript в скомпилированный формат jQuery.Есть идеи?

1 Ответ

3 голосов
/ 03 июля 2012

Первый вариант - использовать Cassette.Web ( См. Документацию , получить его с NuGet ).Примите во внимание, что он также добавит около 6 зависимых пакетов в ваш проект.Нам не понадобились все эти дополнительные материалы, поэтому мы решили извлечь необходимую часть, и это было довольно простой задачей:

Итак второй вариант это

  1. Получитькакой-то JS-движок для .NET (мы использовали Jurassic в качестве Cassette.Web)
  2. Загрузить JS-выдержку из плагина jQuery-tmpl , используемого в 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, загруженный на втором шаге, хранится в ресурсах текущего проекта.

Приветствия

...