2014-11-15 2 views
2

편집 : 해결책을 찾았습니다 다른 사용자가 솔루션을 추가했지만 편집 했으므로 다른 사용자를 위해 본 내용을 추가하고 있습니다. :jquery : HTML 인코딩 엔티티 텍스트가없는 파일에서 HTML을로드 하시겠습니까? (핸들 모음 부분 템플릿과 함께 사용하기위한 '{{>'와 같은)

원본 템플릿은 <div>이며 text/html로 처리되었습니다. 나는이 <script><div>를 교체 한 모든 것이 예상대로 작동합니다

<script id="template-id" type="text/x-handlebars-template"> 

원래 게시

내가 별도의 HTML 파일에서 기록 된 모든 내 핸들 바 템플릿을 가지고있다. 지금까지 나는 문제없이 템플릿의 소스를로드를 확장하려면 다음을 사용했습니다 :

$.get(path, 
    function(templates, textStatus, jqXhr) { 
     var source = $(templates).filter(templateId).html(); 
     var template = Handlebars.compile(source); 

     /* ... */ 

source는 템플릿 코드가 포함되어 있습니다. 간단한 템플릿으로 아름답게 작동합니다. 심지어 부분을 사용하여 HTML 엔티티에 속성을 추가하기 시작했습니다.

<div class="pull-left label label-default tracking-item-data pointable" 
     item-id="{{ItemId}}" 
     data-id="{{Id}}" 
     title="{{> tooltip}}"> 
     {{#if ExternalId}}{{ExternalId}}{{else}}Ignored{{/if}} 
    </div> 

잘 작동합니다.

그러나 지금은 (속성이 아닌) 엔티티 텍스트에 부분을 추가하고 있습니다.

<ul class="list-unstyled list-inline"> 
    {{#Data}} 
    <li title="{{> tooltip}}">{{&gt; datalabel}}</li> 
    {{/Data}} 
</ul> 

참고 일부이든 {{> datalabel}}{{&gt; datalabel}}로 인코딩 된 방법 : 위의 내 자바 스크립트에서 source로드, 대신 적절한 핸들 바 부분 구문을 사용하여 기대 값이 포함 된 경우

<ul class="list-unstyled list-inline"> 
    {{#Data}} 
    <li title="{{> tooltip}}">{{> datalabel}}</li> 
    {{/Data}} 
</ul> 

: 여기에 템플릿의 .html() 방법에서 읽을 때.

엔티티 텍스트의 부분을 인코딩하는 것처럼 보입니다. 이것은 내 Handlebars 메소드를 붕괴시킵니다. 로드 할 때 html이 인코딩되지 않도록하려면 어떻게해야합니까?

답변

0

해결 방법을 발견했습니다. source을 인코딩하여 디코딩하여 적절한 html 텍스트를 가져와야합니다. 이 문제가 해결되고 {{&gt;{{>으로 다시 디코딩됩니다. 수정 사항은 다음과 같습니다.

$.get(path, 
    function(templates, textStatus, jqXhr) { 
     var source = $(templates).filter(templateId).html(); 
     source = $('<div/>').html(source).text(); 

     var template = Handlebars.compile(source); 
+0

이것은 실제로 답변이 아니며 jquery/javascript의 bandaid에 대한 것입니다. 원래 문제가 왜 시작되고 어떻게 피할 수 있는지에 대한 이유가 있다면 궁금합니다. – Shamster

+1

핸들 막대 템플릿은 HTML이 아닌 텍스트입니다. 왜'$ (templates) .filter (templateId) .text()'를 사용하지 않으시겠습니까? – Tomalak

+1

그래, 그거야! – Shamster