ไม่มีใครรู้ว่าฉันจะปิดกล่องโต้ตอบโมดอลทั้งหมดที่สร้างโดย Dojo ได้อย่างไร เห็นได้ชัดว่าเคยมีฟังก์ชัน dojo.popup.closeAll แต่ไม่มีใน Dojo API เวอร์ชันล่าสุดที่มาพร้อมกับ Spring JS อีกต่อไป
ปิดกล่องโต้ตอบโมดอลทั้งหมดใน Dojo
คำตอบ (5)
ถูกต้อง.... เหตุผลที่ไม่มีวิธีการอีกต่อไปก็คือตั้งแต่ 1.0 ใครก็ตามที่เปิดป๊อปอัปจะต้องรับผิดชอบในการปิดมัน มันเป็นการเปลี่ยนแปลงสถาปัตยกรรมที่ฉันทำ
วิดเจ็ตส่วนใหญ่ (เช่น เมนู) จะตรวจสอบเมื่อมีการเบลอ จากนั้นปิดป๊อปอัปย่อย ดังนั้น คุณอาจได้เอฟเฟกต์ที่ต้องการโดยเปลี่ยนโฟกัสไปที่เอกสารเอง หรือไปที่โหนดแบบสุ่ม แน่นอนว่านั่นเป็นวิธีแก้ปัญหา
ใบแจ้งหนี้
วิธีนี้จะค้นหากล่องโต้ตอบตามตัวอักษรทั้งหมดในหน้าและซ่อนไว้:
dijit.registry.filter(function(w){
return w && w.declaredClass == "dijit.Dialog"
}).forEach(function(w){
w.hide();
});
ดูเหมือนว่าวิธีเดียวที่ถูกต้องในตอนนี้คือติดตามกล่องโต้ตอบของคุณและปิดทั้งหมดเมื่อจำเป็นโดยใช้ Hide()
ฉันไม่รู้ว่าสิ่งนี้มีประโยชน์หรือไม่ แต่ฉันมักจะใช้เพียงกล่องโต้ตอบเดียวสำหรับแต่ละหน้า (เนื่องจากเป็นโมดอล) เนื้อหาของกล่องโต้ตอบทั้งหมดคือ xhrGot จากเซิร์ฟเวอร์ และฉันใช้เวลาทั้งหมดภายในวงจรชีวิตของเพจเพื่อรีไซเคิลกล่องโต้ตอบเดียวกันครั้งแล้วครั้งเล่า เพียงเปลี่ยนแอตทริบิวต์ของมัน: href
และ title
ของมัน ฉันพบว่าวิธีนี้ใช้ได้ผลและมีกล่องโต้ตอบหลายอันด้วย
โดโจ >= 1.10:
define(['dijit/registry'], ...
registery.toArray().filter(function(w){
return w && w.declaredClass == "dijit.Dialog"
}).forEach(function(w){
w.hide();
});