2014-01-10 2 views
21

두 곳에서 사용되는 전역 헤더가 있고 템플릿을 렌더링 할 때 전달할 수있는 변수에 위치를 정의하려고했습니다. 같은EJS에 변수 전달하기

뭔가 :

<% include header %> 

헤더 렌더링에 전달 된 가치 :

var headerLocation = 'some/location/header.ejs'; 
res.render(viewDir + '/index', { 
     header: headerLocation 
    }); 

그리고 템플릿 파일

.

어쩌면 내가 뭔가를 놓친 것 같아서 여기서 물어볼 생각이었습니다.

편집 :이 EJS의 버전 2에서 사용할 수

이것은 요약 것이 아니라 아래 답변에 대한 의견에서 언급이다.

는 여기를 참조하십시오 : 여기 https://github.com/mde/ejs#includes 및 관련 토론 : https://github.com/tj/ejs/issues/93 그 오래된 질문은, 다른 사람을 위해 그것을 응답 비록

답변

6

이 기능이 추가되었습니다 ... 어떤 깃발을 전달하고 헤더에 수표 또는 HTML로 헤더를 구문 분석하고 모든 템플릿에 전달하면 일을 남아 있습니다 : 그것은 경로가 아닌 경우 (파일을 찾을 수 없음), 변수 이름으로 평가됩니다. https://github.com/visionmedia/ejs/pull/156

+4

감사합니다. 나는이 질문을 게시 한 직후에 실제로 https://github.com/visionmedia/ejs/issues/93을 보았습니다. 제자리에 풀 요청이 있지만 아직 npm으로 풀어지지 않은 것으로 보입니다. 다행히 그것이 받아 들여지고 곧 풀려날 것입니다. 나는이 대답을 올바른 것으로 표시 할 것이고 그렇게되면 여기에 도착할 수있는 다른 사람들을 오도하지 않을 것입니다. 어떤 이유로 든 Windows에서만 흥미로운 메모가 노드 전역 개체를 사용하여이 작업을합니다. 따라서 <% include global.somepath %>는 어떻게 든 작동합니다. Mac이나 Linux에서는 그렇지 않습니다. 이상한 것. –

+1

buf + = " '(function() + include +"})() +' ";이 라인으로 bug.push 라인을 변경하십시오. (.push로 에러를 일으킬 수 있습니다.) – Arthur

+0

방금 ​​var에 경로를 저장하고'include '와 함께 var를 사용하려고 시도했지만 여전히 값 대신 var 이름을 사용하려고합니다. EJS'1.0.0' – Vadorequest

4

.

github 설명서에 따르면 EJS에는 블록 개념이없고 컴파일 시간 만 포함됩니다. 컴파일 시간이 포함되어 있기 때문에 위치를 하드 코딩해야합니다.

은 그래서 당신은

18

다음은 동적 포함을 수행 할 수있는 데모 코드입니다.

보기

<div flex class="main-container"> 
    <%- include(page) %> 
</div> 

라우터

router.get('/', function (req, res, next) { 
    res.render('pages/index', { 
     page: 'home' 
    }); 
});