โหลดตัวเลือกการเลือกแบบไดนามิกจากบริการภายนอกในกล่องโต้ตอบ Touch UI ใน AEM หรือไม่

ปัญหาของฉันคือการโหลดฟิลด์ที่เลือกในกล่องโต้ตอบ UI แบบสัมผัสพร้อมตัวเลือกแบบไดนามิก ตัวเลือกเหล่านี้มาจาก URL ภายนอกผ่านทางบริการเว็บ ฉันกำลังใช้บริการ RESTful นี้โดยใช้ url ที่กำหนดไว้ในหนึ่งในออบเจ็กต์ JavaScript ทั่วโลกของเรา เช่น

$.get(mec.serviceConfig.baseUrl + '/movies';

โปรดเข้าใจว่าตัวเลือกต่างๆ มาจากบริการเว็บของบุคคลที่สาม โปรดอย่ากล่าวถึงแหล่งข้อมูล เมื่อใดก็ตามที่ฉันค้นหาการโหลดตัวเลือกแบบไดนามิก ฉันจะได้รับบทช่วยสอนนี้

ลิงก์ไปยังบทช่วยสอน นี่ไม่ใช่ สิ่งที่ฉันต้องการ

ใน UI แบบคลาสสิกเป็นเรื่องง่ายด้วย optionsProvider

ใน UI แบบสัมผัส ฉันกำลังพยายามเขียนสคริปต์ที่ดึงข้อมูลจากบริการเว็บภายนอกผ่านการโหลด AJAX ON DIALOG และตั้งค่าตัวเลือกเหล่านี้ในฟิลด์ที่เลือก

มีวิธีที่ง่ายกว่านี้ไหม? ใครช่วยกรุณาแบ่งปันข้อมูลโค้ดได้ไหม


person Oliver    schedule 12.04.2018    source แหล่งที่มา
comment
ฉันไม่แน่ใจว่าทำไมคุณไม่ต้องการใช้ Datasource ที่เหมาะสม คุณสามารถเขียนคลาส Java ที่ดี สะอาด และทดสอบได้ ซึ่งจะดึงไอเท็มจากบริการระยะไกลของคุณ ท้ายที่สุดแล้ว มันเป็นเพียง Servlet (Sling) ที่ลงทะเบียนสำหรับประเภททรัพยากรเฉพาะ จากนั้นใน TouchUI คุณจะตั้งค่าแหล่งข้อมูลของคุณเป็นประเภททรัพยากรนี้ เซิร์ฟเล็ตถูกเรียกและส่งคืนแหล่งข้อมูล หากคุณต้องการฉันสามารถให้ตัวอย่างรหัสแก่คุณได้   -  person Jens    schedule 12.04.2018
comment
mec.serviceConfig.baseUrl นี้เป็นตัวแปรจาวาสคริปต์ที่มี URL ของบริการเว็บ คุณกำลังพูดแทนที่จะกดปุ่มนี้โดยตรงผ่านจาวาสคริปต์ ฉันควรเรียก sling servlet ซึ่งจะเรียกใช้บริการนี้ภายในโดยใช้ HTTpGet และส่งกลับค่า ... duh   -  person Oliver    schedule 12.04.2018
comment
@Jens เหนือหัวมาก เพียงเพื่อให้ได้คู่/ตัวเลือกของค่าคีย์ที่มีอยู่ในตัวเลือกที่เลือก สำหรับโหมดการเขียนหนึ่งโหมด เช่น แตะ และเพื่อใช้เฉพาะในโหมดผู้เขียนเท่านั้น   -  person Oliver    schedule 12.04.2018
comment
ท้ายที่สุดแล้ว คุณก็สามารถเขียนโค้ด JS ที่ทำทั้งหมดนี้ได้เสมอ แต่จากประสบการณ์ของฉันสิ่งเหล่านี้มักจะเป็นโซลูชันที่เปราะบางซึ่งยากต่อการเขียนการทดสอบและบำรุงรักษาอย่างน่าเชื่อถือในช่วงหลายปีที่ผ่านมา ฯลฯ คุณกำลังแลกเปลี่ยนโซลูชันที่แข็งแกร่งกว่าใน Java ด้วยโซลูชันที่ง่ายต่อการนำไปใช้ใน Javascript (แม้ว่าจะเป็นเช่นนั้นก็ตาม กรณีที่เราจะไม่ได้มีการพูดคุยเรื่องนี้) ในที่สุดคุณจะต้องตัดสินใจตามความต้องการของโครงการ   -  person Jens    schedule 12.04.2018
comment
ฉันเห็นด้วยอย่างยิ่งกับ @Jens ฉันพูดแบบเดียวกันในคำถามอื่นของคุณ baseurl อาจถูกฮาร์ดโค้ดใน JS ของคุณ แต่ไม่มีเหตุผลที่จะเริ่มยุ่งกับสิ่งอื่น URL ควรมาจากแอปพลิเคชัน AEM ของคุณ (เช่น แบ็กเอนด์ควรส่ง URL นี้ไปยังส่วนหน้า ไม่ใช่ในทางกลับกัน) สถาปัตยกรรมที่นี่ดูเหมือนไปผิดทาง คุณสามารถตั้งค่า URL ฐานของคุณผ่าน OSGI และส่งผ่านไปยังการกำหนดค่า JS บางส่วน (หรือดึงข้อมูลด้วย ajax) แต่คุณสามารถใช้บริการแบ็กเอนด์ของคุณเพื่อใช้งานสิ่งอื่นๆ เป็นแหล่งข้อมูลได้ เช่น เนื่องจากคุณมีข้อมูลทั้งหมดที่คุณต้องการในแบ็กเอนด์   -  person d33t    schedule 12.04.2018
comment
@ d33t จากประสบการณ์ของฉัน วิธีที่ดีที่สุดในการย้ายการกำหนดค่า OSGI ไปที่ `TouchUI“ JavaScript คือผ่าน PageInfoProvider คลาส Java ที่สวยงาม สะอาดตา และสั้นที่สามารถเพิ่มค่าให้กับ ns.pageInfo ได้   -  person Jens    schedule 12.04.2018
comment
@Jens ดังนั้น URL พื้นฐานจึงมาจากการกำหนดค่า OSGi ฉันคิดว่ามันมีค่าใช้จ่ายมากเกินไปในการเขียนแหล่งข้อมูลโดยดึง baseurl จากไฟล์กำหนดค่า OSGi จากนั้นทำการโทร HTTP Get จากนั้นส่งต่อไปยังตัวเลือกที่เลือก มันมากเกินไปที่จะทำน้อยเกินไป หวังว่าคุณจะเข้าใจสิ่งที่ฉันพยายามจะพูด   -  person Oliver    schedule 12.04.2018
comment
@ d33t โปรดอ่านความคิดเห็นด้านบน ขอบคุณ   -  person Oliver    schedule 12.04.2018
comment
ไม่ มันไม่ได้มากเกินไปและมีการนำไปใช้อย่างรวดเร็วสำหรับนักพัฒนาที่มีประสบการณ์และรู้ว่าเขากำลังทำอะไรอยู่ พยายามนำสิ่งต่าง ๆ ไปใช้ในลักษณะที่นักพัฒนา aem ทุกคนจะเข้าใจ ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดของ Adobe และวิธีการทำสิ่งต่าง ๆ ที่แนะนำใน aem ด้วยวิธีนี้คุณสามารถมั่นใจได้ว่าโซลูชันของคุณจะทำงานได้แม้ว่า UI ของปะการังจะเปลี่ยนไปโดยสิ้นเชิงก็ตาม   -  person d33t    schedule 13.04.2018


คำตอบ (1)


คุณควรสร้าง JS Listener สำหรับส่วนประกอบของคุณ

$document.on("dialog-ready", function() {
// there you should find your select field 
//for example
var language = $("[name='./language']").closest(".coral-Select");
//then append to your select field new options from your datasource
});

โปรดดูเอกสาร: การอัปเดตแบบไดนามิก AEM TouchUI Dialog Select Fields

person Prosis    schedule 06.09.2018