2013-08-05 1 views
5

저는 Node.js와 함께 일하고 있습니다. 가정 나는 옥 파일 한 쌍의가 있습니다옥으로 된 단일 블록을 렌더링하십시오.

template.jade을

html 
    body 
    block page-content 

example.jade

extends template 
    block page-content 
     p 
      | Lorem ipsum yadda yadda 

내가 example.jade 렌더링, 난 그 단락을 연결의 결과를 얻을 수 있습니다 태그를 template.jade의 body 태그에 추가합니다.이 태그는 일반적으로 내가 원하는 것입니다.

내 문제는 pushState와 History API를 사용하여 이러한 파일 (물론 obivously -these- 파일)을로드하려고하는데 문제가 발생하면 해당 파일의 내용을 반환하는 요청을 원한다는 것입니다. 전체 HTML 문서의 나머지 부분없이 페이지 내용 블록 자체. Jade에게 블록 자체를 렌더링하고 템플릿에 포함시키지 말라고하는 간단한 방법이 있습니까?


나는 그것이로 변경되었다 가지고 올 수있는 최선 :

example.jade

extends template 
    block page-content 
    import example-content 

예를-content.jade에게

p 
    | Lorem ipsum yadda yadda 

을하지만 hackish 듯 이런 추가 파일을 만들 수 있습니다.

답변

0

제이드는 ​​실행 코드를 지원합니다. 접두어로 사용할 때 - (버퍼링없이).

- if (renderType && renderType == 'page') { 
    doctype 5 
    html 
     head 
     title= title 
     body 
- } 
     block content 

같은 HTML 페이지를 렌더링 : 돈

res.render('index', { title: 'StackOverflow', renderType: 'block' }); 

그리고 경우 :

res.render('index', { title: 'StackOverflow', renderType: 'page' }); 

같은 HTML 블록을 렌더링 메인 레이아웃 옥 템플릿의 한 Statment이 경우 예를 들어, 당신은 을 사용할 수 있습니다 render_type을 모든 렌더링 표현식에서 사용하려면

를 사용하십시오.
res.locals(obj) //*Assign several locals with the given obj. The following are equivalent:* 

모든 요청에 ​​대해 기본값을 설정합니다. 이 응용 프로그램은 핸들러 추가 초기화하기 : 나는 조건부 라인 "템플릿을 확장"을 포함 할 수있는 방법이 생각하지 않습니다

var logger = function(req, res, next) 
{ 
    res.locals({renderType:'page'}); 
    next(); 
}; 

app.use(logger); 
+0

을; 내 템플릿 파일 안에 두 개의 거대한 if 블록을 넣는 것은 고통스러운 것처럼 보입니다. – Retsam

관련 문제