2016-12-07 2 views
0

핸들 바에서 pug로 전환하기 pug에서 드롭 다운을 채우는 방법을 모르겠습니다. 내가 할 수있는 핸들에서pug에서 드롭 다운을 채우는 방법

<script type='text/javascript'> 
    $('.ui.dropdown').dropdown('set selected', [{{#each trip.tags}}'{{this}}',{{/each}}]); 
</script> 

누구나 pug에서 가장 좋은 방법은 무엇인지 실마리가 있습니까?

답변

1

템플릿 렌더링의 일부로 JavaScript 값을 생성하는 것처럼 보입니다. this이 올바르게 이스케이프 처리되지 않은 경우 (또는 "과 같은 값이 &quot;으로 표시 될 수있는 경우) 마크 아웃에서 수행 한 접근 방식은 XSS 공격을 유발할 수 있습니다.

스크립트에 템플릿 값을 삽입해야 할 경우 js-stringify을 사용하는 것이 좋습니다. 이렇게하려면 npm을 사용하여 js-stringify을 설치해야합니다. 그런 다음 현지인에게 포함시켜야합니다. 예 :

script(type='text/javascript'). 
    $('.ui.dropdown').dropdown('set selected', !{stringify(trip.tags)}); 

N.B. :

pug.renderFile('my-template.pug', {stringify: require('js-stringify')}); 

그럼 당신은로 사용할 수 있습니다 js-stringify은 렌더링 전에 값을 올바르게 이스케이프 처리하기 때문에 !{...} 구문을 사용하는 것이 안전합니다.

+0

소리가 잘 들립니다. 사실, semantic-ui가로드 된 후 requirejs를 사용하여 AMD 모듈 내에서 드롭 다운을 설정 했으므로 변수에 직접 액세스 할 수 없습니다. 숨겨진 필드의 값을 채우고 거기에서 읽는 것이 안전합니까? 아니면이 경우 무엇을 권하고 싶습니까? – Flaudre

+0

requirejs 모듈 내에서 아약스 호출을 수행 할 수도 있습니다 ... 더 간단한 접근법이 있다면 알고 싶습니다. 감사! – Flaudre

+0

AJAX 요청을 작성하는 것이 좋습니다. 숨겨진 입력에 넣는 것도 괜찮습니다 (적절하게 이스케이프 처리 된 경우). – ForbesLindesay

관련 문제