2011-11-07 4 views
3

서버에 Underscore.js 템플릿을 컴파일하는 방법이 있습니까 생성 된 코드로 Closure 컴파일러를 사용할 수 있습니까?Underscore.js와 클로저 컴파일러 사용 _template

_.template = function(str, data) { 
    var c = _.templateSettings; 
    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + 
     'with(obj||{}){__p.push(\'' + 
     str.replace(/\\/g, '\\\\') 
     .replace(/'/g, "\\'") 
     .replace(c.interpolate, function(match, code) { 
      return "'," + code.replace(/\\'/g, "'") + ",'"; 
     }) 
     .replace(c.evaluate || null, function(match, code) { 
      return "');" + code.replace(/\\'/g, "'") 
       .replace(/[\r\n\t]/g, ' ') + "__p.push('"; 
     }) 
     .replace(/\r/g, '\\r') 
     .replace(/\n/g, '\\n') 
     .replace(/\t/g, '\\t') 
     + "');}return __p.join('');"; 
    var func = new Function('obj', tmpl); 
    return data ? func(data) : func; 
}; 

가에와 문에 자바 스크립트를 생성

가장 큰 문제는 _.template 것입니다. 두 명백한 경로는 다음과 같습니다

  1. 좋은

두 번째 옵션이 가능 연주에 Underscore.js의 _.template가 옆 널빤지에게

  • 강제 변환 폐쇄를 생성하지 않도록 수정?

  • 답변

    2

    일반적으로 JS 엔진은 "with"없이 더 잘 수행되므로 "with"없이 생성하면 최상의 솔루션 일 가능성이있는 옵션입니다.

    그렇지 않으면 Closure Compilers ADVANCED 모드를 사용하고자하는지 여부에 따라 옵션이 달라질 수 있습니다. SIMPLE 모드에서는 컴파일러가 템플릿의 속성 이름을 바꾸지 않고 선언되지 않은 변수가 전역 변수라고 가정합니다. 머지 않아 템플리트 객체가 어떤 로컬 변수를 음영 처리하지 않는 한 "그냥 작동"할 수 있습니다.

    +0

    예, 고급 컴파일을 목표로합니다. 재 작업에 주저하는 것은 템플릿 코드가 주기적으로 업데이트된다는 것입니다. 유지 관리 문제입니다. – hughdbrown

    +0

    필요에 따라 ADVANCED 컴파일 작업을 위해 설계된 Closure Templates를 사용해보십시오. – John