2011-08-15 4 views
2

jQuery 템플릿을 사용하여 JSON을 마크 업합니다. 누구든지 서버에서 자바 스크립트로 미리 컴파일하여 브라우저가 매번 그렇게하지 못하도록하는 우아한 솔루션이 있는지 궁금합니다..Net에서 jQuery 템플릿을 어떻게 사전 컴파일합니까?

나는 다음과 같은 게시물을 알고 :

pre-compile JavaScript templates to functions on project build

그리고 내가

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

사용할 수 있다는 것을 이해하지만 난 더 우아한 뭔가가 있다는 것을 희망하고있다. 예를 들어, * .jst 파일에 대한 요청을 처리하도록 설정할 수있는 HttpModule을 컴파일하고 컴파일하여 결과 JS를 반환하는 방법은 어떻습니까?

아직 존재하지 않겠지 만 jquery-tmpl-jst 프로젝트에서 서버 측을 실행할 수 있다고 가정하면 HttpModule을 빌드하는 것이 상당히 쉬운 것처럼 보입니다.

도움을 주시면 감사하겠습니다. 모듈이 존재하지 않으면 실제 컴파일 작업을 수행하는 방법을 정할 수 있다면 필자가 작성하는 것을 고려할 것이다.

UPDATE는

난 그냥이 라이브러리를 발견했다. 그것은 HttpModule이 아니지만, 서버 측을 컴파일하는 jQuery 템플릿을 구현하는 것처럼 보입니다. 완전히 구현되었거나 아직 구현되지 않았는지 확실하지 않습니다.

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

UPDATE

는 jQuery를 컴파일 형식으로 자바 스크립트를 얻을 수 없다, 그래서 위의 라이브러리가 실제로 닷넷에서 서버에 jQuery를 템플릿을 실행처럼 잘 보이는. 어떤 아이디어?

답변

3

첫 번째 옵션은 Cassette.Web (See documentation, get it with NuGet)를 사용하는 것입니다. 약 6 개의 의존 패키지를 프로젝트에 추가 할 것이라고 고려하십시오. 우리가 필요한 부분을 추출하기로 결정하고 그것은 아주 간단한 작업이었다 그래서 우리는이 모든 추가 재료를 필요로하지 않았다

그래서 두 번째 옵션

  1. 입니다 (우리가 사용하는 .NET에 대한 몇 가지 JS 엔진을 얻기 웹캠 번호 : Jurassic) 카세트 .Web에서 사용 된
  2. Download JS extract from jQuery-tmpl plugin.
  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

우수. 이것은 내가 찾고 있었던 바로 그 것이다. –