2013-02-13 4 views
0

누구나 Dijit 위젯에 데코레이터 패턴을 적용 할 수 있습니까?Dojo 위젯 및 데코레이터 패턴?

예를 들어, 일부 입력 텍스트와 버튼이있는 양식을 보여주는 FormA_Widget이 주어집니다. 아이디어는 "확장"좀 더 라디오 버튼, 입력과 그것을 장식하는 FormA_WidgetFormB_Widget를 만드는 것입니다 등

내가 위젯을 템플릿 기반 사용자 정의 위젯을 작성하고도 방법 "확장"하는 방법을 알고

, 내가 필요한 것은 원하는 "decoration2를 추가 할 수 FormA_widget 내 어떤 장소에서 FormB_Widget의 템플릿을"주입 "하는 방법을 알고있다

감사합니다 사전에

답변

1

체크 아웃 내가 만든 예 :.. http://plnkr.co/edit/dGMJ8UBQ9dT3dGQPQSeu?p=preview

이것은 가장 간단한 솔루션이지만, FormA에 작은 변화의 몇 가지가 필요합니다

FormA.js :

var FormA = declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], { 
    templateString: template, 

    templateExtensionString: "" // <= add `templateExtensionString` property 
}); 

FormA.html을 - 위젯 템플릿에 templateExtensionString 자리 표시자를 추가

<div> 
    <div><!-- FormA markup --></div> 

    <div>${!templateExtensionString}</div> 

    <div><!-- FormA markup --></div> 
</div> 

NB :_TemplatedMixin을 방지하려면 문자열 내 인용 부호를 이스케이프하는 경우 전체 변수 이름 앞에 "!"를 두십시오.

이제 FormA을 확장 할 수 있습니다 :

var FormB = declare([FormA], { 

    templateExtensionString: template // FormB template (dojo/text!./FormB.html) 

}); 

을 경우 당신이 FormADojo Dialog with confirmation button에 대한 내 대답을 살펴를 수정하고 여기에 유사한 전략을 사용 고려할 수 없습니다.

+0

샘플 코드를 작성해 주셔서 감사합니다. – EricSonaron