2011-04-06 3 views
1

비행 중에 html을 생성하는 javascript로 DRY를 달성하는 방법에 대한 질문이 있습니다. 나는 또한 아약스를 통해 새로운 태그를로드 일부 자바 스크립트가 지금 장고 템플릿 라Javascript/Django Design Pattern

{{ tag.title }} 
{% if request.user.is_authenticated %} 
<a name="del-tag" data-id="{{ tag.id }}" class = "tag-x" title="Remove Tag" href="#">x</a> 
{% endif %} 

에 의해 동적으로로드하고 채워집니다 요소의 목록이있다. 관련 부분은 다음과 같습니다.

var newTag = "<span class = \"tag\">" + tagName + "<a name=\"del-tag\" data-id=\"" + tag_id + "\"" + 
         "class = \"tag-x\" title=\"Remove Tag\" href=\"#\">x</a></span>"; 
$('#tags').append(newTag); 

자바 스크립트에서 HTML이 중복되는 것을 피할 수 있습니까?

감사합니다.

답변

1

jquery (사용중인 jquery로 가정)는 DOM 요소를 복제 할 수있는 clone 기능이 있습니다. 이미 존재하는 html 요소 중 하나를 복제하고 속성의 값을 변경 한 다음 다시 DOM에 추가 할 수 있어야합니다. 나는이 일을 직접하지는 않았지만 그것은 이론적으로 작동해야합니다.

+0

하지만 시작할 요소가 없으면 어떻게해야합니까? 복제 할 DOM 요소가 없습니다. –

+0

흠 재미있는 문제입니다. 나는 정말로 내가 좋아하는 해결책을 생각할 수 없다. 그것은 또한 DRY이다. 내가 생각할 수있는 유일한 생각은 여러분이 전달한 값을 기반으로 필요한 HTML 태그를 생성 할 수있는 사용자 정의 Django 태그 또는 위젯을 작성하는 것입니다. 그런 다음 나중에 복제 할 수있는 숨겨진 HTML 태그를 렌더링 할 수 있습니다. 나는 사용자 정의 태그 또는 위젯을 만드는 데 정말로 혼란스러워하지 않았다. – solartic

0

예, 가능합니다. 별도의 템플릿에 모든 태그 생성 기능을 보유하십시오. 다음 태그를 생성하는 몇 가지 URL이 있습니다. 이처럼 :

www.example.com/tags/?tags=tag1,tag2,tag3 

이 생산 : 코드에서 AJAX 호출을 수행 할 때 다음

이 같은 것을 할 : 장고/템플릿 측면에서

$('div.tags').load('www.example.com/tags/?tags=tag1,tag2,tag3') 

URL에 의해 반환 된 결과를 페이지 템플릿 본문에 포함시키는 방법을 찾고 싶을 것입니다. 장고 템플릿 엔진이 제공하는 툴이 정확히 무엇인지는 모르겠지만, 먼저 뷰에서이 코드를 몇 가지 뷰 메서드에 넣고이 뷰를 확장 할 수있는 것처럼 보일 것입니다. 템플리트 변수를 다음과 같이 render(..., tags=self.generate_tags(args)) 템플릿으로 제공하십시오. 단지 {{ tags }} 일 것입니다.

/tags/?tags=...과 일반 페이지 /page/은 모두 generate_tags() 메서드를 다시 사용할 수 있습니다.

희망 하시겠습니까?