2009-07-20 9 views
5

로드 된 경우 Dojo 대화 상자를 닫아야하는 함수를 실행 중입니다. 어떻게 dojo 대화 상자가 실행 중인지 확인합니까? 정의되지 않은 순수 자바 스크립트를 사용하고 ID로 확인합니까?Dojo 대화 상자가로드되었는지 어떻게 확인할 수 있습니까?

if (dijit.byId("blah") !== undefined) { 
    destroyRecursive dijit; 
} 

또는 내가 좋아하는 대화 개체의 속성 사용합니까 :

isFocusable method 
isLoaded property 
+0

: 기능 bufferAddress (xCoord, yCoord) { 이 경우 (dijit.byId ("selectLocationDlg") == 정의되지 않은!) { dijit.byId ("selectLocationDlg"). destroyRecursive(); } // 다른 코드는 여기 –

답변

4

Dialog provides two propertiesisLoadedopen을 확인하는 것이 좋습니다. 코드를 파헤 치면 다음과 같은 설명을 볼 수 있습니다 :

  • 열기 : 현재 대화 상자가 화면에 표시되어 있으면 true입니다.
  • isLoaded : ContentPane에 초기화 중에 (href 또는 인라인 컨텐츠를 통해) 지정되었거나 attr ('content', ...)/attr ('href', ...) 내용이 없거나 ContentPane이 href를 다운로드하는 중일 경우 False입니다.

그래서, 당신은 할 수 : 이것은 최종 기능입니다

var dialog = dijit.byId("blah"); 
if(dialog.open) { 
    dialog.destroy(); 
} 
+0

8yrs 이후에'if (dialog && dialog.open)'또는'dialog'가 존재한다는 다른 안전 체크 ('typeof (dialog)! = 'undefined' ','dialog! = null' 등). – Daevin

1

당신이 그것을 숨기거나 그것을 파괴 하시겠습니까을?

그냥 표시 할 경우/당신은 다음과 같은 작업을 수행 할 수 숨길 :

var dialog = dijit.byId('blah'); 
dialog.destory(); 

내가 destroy 이후 재귀 생각 : 당신이 메모리를 확보 할 경보기를 박살낸 게 아니란하고 싶다면

var dialog = dijit.byId('blah'); 
if (dialog) { 
    if (dialog.open) { 
    dialog.hide(); 
    } 
    else { 
    dialog.show(); 
    } 
} 

을 부모 destroy 메서드를 호출하고 부모 중 하나는 dijit.layout.ContentPane입니다.