2011-12-31 2 views
1

Express에서 사용자가있는 페이지에 따라 JavaScript 및 스타일 시트를 동적으로 참조 할 수 있기를 원합니다. 나는 그렇게 할 수있는 최선의 방법을 생각하고있다. (비록 제안은 있지만) 레이아웃 페이지에 현재보기를 전달하는 것이다.ExpressJS의 레이아웃에 현재 경로 또는보기를 제공하는 방법은 무엇입니까?

예 :

http://example.com/trees

내가 말한 layout.jade에서 어떤 논리를 갖고 싶어 할 것 URL을 감안할 때의 효과에 뭔가 :

:로 렌더링받을 것

script(src="/javascripts/{view}.js")

<script src="/javascripts/trees.js"></script>

이렇게하는 데 유용한 제안이나 권장 사항이 있습니까?

+1

try __jade [0] .filename을 사용하여 자동으로이 값을 뷰에 표시 할 수 있습니다. 답변 인 경우 어떻게 알 수 있습니까? – jcolebrand

+0

thks @jcolebrand는 나를위한 가장 간단한 해결책이었습니다. –

+0

반갑습니다. 소스 코드에서 어떻게 파생되었는지 알고 싶습니까? – jcolebrand

답변

4

req.route가 일치하는 경로이므로 req.route.path 등을 사용할 수 있습니다. 물론 req.url도 파싱 할 수 있습니다. 익스프레스 2x를 사용하면 "동적 도우미"또는 res.local()

+1

3 명의 사용자를 표현하기위한 메모 : 동적 헬퍼는 app.locals에 대한 지원이 중단됨 http://expressjs.com/api.html#app.locals –

0

Express는 URL 도우미와 같은 레일을 제공하지 않으므로 최선의 방법은 없으므로 접근 방법이 좋습니다.

0

쉬운 대답은 모든 자바 스크립트를 하나의 파일에 넣고 끝내는 것입니다. CSS는 마찬가지입니다. 자세한 내용은 Ruby on Rails asset pipeline을 참조하십시오. 아마도 다른 페이지에서 다른 자바 스크립트를 사용함으로써 삶이 필요 이상으로 복잡해지고 효율성이 떨어집니다.

그러나 질문을 한 후에는 자바 스크립트에 대한 대답이 쉽습니다. 레이아웃이 아닌보기에 여분의 <script> 태그 만 넣으면됩니다. 문제 해결됨. <link> 태그가 <head> 안에 있어야하기 때문에 CSS가 정상적으로 작동하지 않습니다. 이 경우 필자는 필 요한 스타일을 문자열 배열로 정의하고이를 내 레이아웃 템플릿에서 반복합니다. 그래서 내 길에 나는 그런 다음 템플릿에서 그 이상 루프는 각각 하나 개의 <link> 태그를 생성 등

locals.css = ['/css/one.css', '/css/two.css'] 

으로 지역 변수를 설정합니다.

관련 문제