2012-01-16 2 views
6

express.js와 작동하도록 플레이트 템플릿 엔진을 얻으려고합니다. 내 최초의 시도였다이 :Express.js 사용자 정의 템플릿 엔진 (플레이트)

app.register('.html', { 
    compile: function (str, options) { 
     var template = new plate.Template(str); 
     return function(locals) { 
      return template.render(locals, function(err, data) { 
       return data; 
      }); 
     } 
    } 
}); 

나는 문제가 template.render이 (정의되지 않은) 아무것도 반환하지 않는다는 것입니다하지만 콜백에 데이터를 전달하는 참조하십시오. 익스프레스는 컴파일 된 함수가 호출 될 때 렌더링 된 템플릿을 직접 리턴하는 함수를 반환 할 것으로 기대하기 때문에이 경우 어떻게 동작하게 할 지 모르겠습니다.

아마도이 문제를 해결하기 위해 약속을 사용할 수는 있지만 익스프레스 코드는 약속이 반환 될 것으로 예상하지 않기 때문에 성공하지 못했다고 생각했습니다. 약속을 너무 빨리 지키지 않아서 잘못하고있을 수도 있습니다.

app.register('.html', { 
    compile: function (str, options) { 
     var promise = new Promise(); 
     var template = new plate.Template(str); 
     return function(locals) { 
      template.render(locals, function(err, data) { 
       promise.resolve(data); 
      }); 
      return promise; 
     } 
    } 
}); 

다음은 작동하는 맞춤 구현 예입니다. 은 {% 블록 %} 태그는 정말 대단하기 때문에 정말 플레이트 템플릿을 사용하고 싶습니다

app.register('.html', { 
    compile: function (str, options) { 
     var template = _.template(str); 
     return function (locals) { 
      return template(locals); 
     }; 
    } 
}); 

: 차이점은 템플릿 템플릿() 함수를 직접 렌더링 된 문자열과 같이 반환 강조된다. 어떤 도움을 주셔서 감사합니다.

관련 문서 :

plate's github docs

express.js app.register docs

+0

이 질문을 한 후 플레이트 작성자가 신속하게 프로젝트에 패치를 추가하여 Express와 호환되도록했습니다. [email protected]+가 변경되었으며 구현 세부 정보 [여기] (https://github.com/chrisdickinson/plate/wiki/Getting-Started---In-Node) – joshontheweb

+1

을 볼 수 있습니다. 그것이 사실이라면이 질문을 받아들이십시오! – tjarratt

답변

5

는 판의 작성자는 즉시 나는이 질문 후 명시와 호환 가능하게하기 위해 프로젝트에 패치를 추가했다. [email protected]+가 변경되어 구현 세부 정보를 볼 수 있습니다. here