2009-07-20 29 views
5

Tôi đang chạy một chức năng cần đóng hộp thoại Dojo nếu nó được tải. Làm cách nào để kiểm tra xem hộp thoại dojo có đang chạy không? Tôi có sử dụng JavaScript thuần túy và kiểm tra bằng id nếu nó không xác định?Làm cách nào để kiểm tra xem hộp thoại Dojo có được tải không?

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

Hoặc để tôi sử dụng một thuộc tính của đối tượng thoại như:

isFocusable method 
isLoaded property 
+0

Đây là chức năng cuối: chức năng bufferAddress (xCoord, yCoord) { if (dijit.byId ("selectLocationDlg") == undefined!) { dijit.byId ("selectLocationDlg"). DestroyRecursive(); } // một số mã khác ở đây } –

Trả lời

4

Dialog provides two properties bạn có thể muốn kiểm tra: isLoadedopen. Bằng cách đào mã, bạn sẽ tìm thấy các mô tả sau:

  • mở: Đúng nếu hộp thoại hiện được hiển thị trên màn hình.
  • isLoaded: True nếu ContentPane có dữ liệu trong đó, hoặc được chỉ định trong khi khởi tạo (thông qua href hoặc nội dung nội tuyến) hoặc được đặt qua attr ('content', ...)/attr ('href', ...) Sai nếu nó không có bất kỳ nội dung nào hoặc nếu ContentPane vẫn đang trong quá trình tải xuống href.

Vì vậy, bạn có thể chỉ:

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

8 năm sau, bạn nên sử dụng 'if (dialog && dialog.open)' hoặc một số kiểm tra an toàn khác mà hộp thoại 'tồn tại '(' typeof (dialog)! =' Undefined ' ',' dialog! = null', v.v.). – Daevin

1

Bạn có muốn giấu nó hoặc tiêu diệt nó?

Nếu bạn chỉ muốn hiển thị/ẩn nó, bạn có thể làm như sau:

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

Nếu bạn muốn phá tan nó để giải phóng bộ nhớ:

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

Tôi nghĩ destroy là đệ quy từ nó gọi phương thức cha mẹ là destroy và một trong số cha mẹ của nó là dijit.layout.ContentPane.

Các vấn đề liên quan