ปิดกล่องโต้ตอบโมดอลทั้งหมดใน Dojo

ไม่มีใครรู้ว่าฉันจะปิดกล่องโต้ตอบโมดอลทั้งหมดที่สร้างโดย Dojo ได้อย่างไร เห็นได้ชัดว่าเคยมีฟังก์ชัน dojo.popup.closeAll แต่ไม่มีใน Dojo API เวอร์ชันล่าสุดที่มาพร้อมกับ Spring JS อีกต่อไป


person Alex Marshall    schedule 04.12.2008    source แหล่งที่มา


คำตอบ (5)


ถูกต้อง.... เหตุผลที่ไม่มีวิธีการอีกต่อไปก็คือตั้งแต่ 1.0 ใครก็ตามที่เปิดป๊อปอัปจะต้องรับผิดชอบในการปิดมัน มันเป็นการเปลี่ยนแปลงสถาปัตยกรรมที่ฉันทำ

วิดเจ็ตส่วนใหญ่ (เช่น เมนู) จะตรวจสอบเมื่อมีการเบลอ จากนั้นปิดป๊อปอัปย่อย ดังนั้น คุณอาจได้เอฟเฟกต์ที่ต้องการโดยเปลี่ยนโฟกัสไปที่เอกสารเอง หรือไปที่โหนดแบบสุ่ม แน่นอนว่านั่นเป็นวิธีแก้ปัญหา

ใบแจ้งหนี้

person Community    schedule 09.12.2008
comment
ตกลง. น่าเสียดายที่นั่นไม่ได้ช่วยสถานการณ์ของฉันจริงๆ แต่นั่นไม่ใช่ความผิดของคุณ ขอขอบคุณสำหรับคำตอบของคุณทุกคน เราซาบซึ้งใจมาก - person Alex Marshall; 11.12.2008

วิธีนี้จะค้นหากล่องโต้ตอบตามตัวอักษรทั้งหมดในหน้าและซ่อนไว้:

dijit.registry.filter(function(w){ 
    return w && w.declaredClass == "dijit.Dialog" 
}).forEach(function(w){ 
    w.hide(); 
});
person user49360    schedule 27.12.2008
comment
เมื่อฉันดูสิ่งนี้ มันบอกว่า 'ตัวกรอง' ไม่ได้ถูกกำหนดไว้ มีการเปลี่ยนแปลงใด ๆ ในเรื่องนี้หรือไม่? - person streetlight; 11.07.2014

ดูเหมือนว่าวิธีเดียวที่ถูกต้องในตอนนี้คือติดตามกล่องโต้ตอบของคุณและปิดทั้งหมดเมื่อจำเป็นโดยใช้ Hide()

person Eugene Lazutkin    schedule 05.12.2008

ฉันไม่รู้ว่าสิ่งนี้มีประโยชน์หรือไม่ แต่ฉันมักจะใช้เพียงกล่องโต้ตอบเดียวสำหรับแต่ละหน้า (เนื่องจากเป็นโมดอล) เนื้อหาของกล่องโต้ตอบทั้งหมดคือ xhrGot จากเซิร์ฟเวอร์ และฉันใช้เวลาทั้งหมดภายในวงจรชีวิตของเพจเพื่อรีไซเคิลกล่องโต้ตอบเดียวกันครั้งแล้วครั้งเล่า เพียงเปลี่ยนแอตทริบิวต์ของมัน: href และ title ของมัน ฉันพบว่าวิธีนี้ใช้ได้ผลและมีกล่องโต้ตอบหลายอันด้วย

person pierdeux    schedule 19.02.2009

โดโจ >= 1.10:

define(['dijit/registry'], ...

registery.toArray().filter(function(w){ 
    return w && w.declaredClass == "dijit.Dialog" 
}).forEach(function(w){ 
    w.hide(); 
});
person widecr0w    schedule 09.07.2015