นี่เป็นคำถามเก่าที่มีหลายคำตอบที่ใช้งานได้ แต่ฉันได้ค้นพบวิธีแก้ปัญหาโดยใช้สิ่งที่ Magento จัดให้ (ณ วันที่ 2.1.0) โดยไม่จำเป็นต้องขยายองค์ประกอบ เนื่องจากมีการทำเครื่องหมายคำถามหลายคำถามว่าซ้ำกันและมุ่งตรงไปที่นี่ฉันคิดว่ามันจะเป็นประโยชน์ในการให้ข้อมูลบางอย่างเกี่ยวกับตัวเลือกนี้
องค์ประกอบแบบฟอร์มองค์ประกอบ UI ทั้งหมดที่ขยายMagento_Ui/js/form/element/abstract.jsมีการswitcherConfigตั้งค่าสำหรับวัตถุประสงค์เช่นการซ่อน / แสดงองค์ประกอบเช่นเดียวกับการกระทำอื่น ๆ switcherองค์ประกอบที่สามารถพบได้ที่Magento_Ui / js / รูปแบบ / สลับสำหรับอยากรู้อยากเห็น คุณสามารถหาตัวอย่างของมันถูกนำมาใช้ในsales_rule_form.xmlและcatalog_rule_form.xml แน่นอนว่าหากคุณใช้องค์ประกอบที่กำหนดเองของคุณเองคุณสามารถใช้สิ่งนี้ได้ตราบใดที่องค์ประกอบของคุณขยายไปในที่สุดabstractซึ่งดูเหมือนจะเป็นกรณีตามรหัสตัวอย่างที่ให้ไว้ในคำถาม
ตอนนี้เป็นตัวอย่างที่เฉพาะเจาะจงมากขึ้นเพื่อตอบคำถามเดิม
ในNamespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xmlคุณเพียงแค่ต้องเพิ่มสิ่งต่อไปนี้ลงในฟิลด์settingsที่ควบคุม (เช่นฟิลด์ที่กำหนดว่าจะซ่อนหรือซ่อนฟิลด์ใด) field1ในตัวอย่างของเรื่องนี้จะเป็น
<field name="field1">
<argument name="data" xsi:type="array">
...
</argument>
<settings>
<switcherConfig>
<rules>
<rule name="0">
<value>2</value>
<actions>
<action name="0">
<target>your_entity_form.your_entity_form.entity_information.field2Depend1</target>
<callback>show</callback>
</action>
<action name="1">
<target>your_entity_form.your_entity_form.entity_information.field3Depend1</target>
<callback>hide</callback>
</action>
</actions>
</rule>
<rule name="1">
<value>3</value>
<actions>
<action name="0">
<target>your_entity_form.your_entity_form.entity_information.field2Depend1</target>
<callback>hide</callback>
</action>
<action name="1">
<target>your_entity_form.your_entity_form.entity_information.field3Depend1</target>
<callback>show</callback>
</action>
</actions>
</rule>
</rules>
<enabled>true</enabled>
</switcherConfig>
</settings>
</field>
มาทำลายมันกันหน่อย switcherองค์ประกอบมีอาร์เรย์ของrulesซึ่งเป็นสิ่งที่เรากำลังสร้างออกจากที่นี่ แต่ละคน<rule>มีชื่อซึ่งเป็นตัวเลขในตัวอย่างนี้ ชื่อนี้เป็นคีย์อาร์เรย์ / ดัชนีสำหรับรายการนี้ เรากำลังใช้ตัวเลขเป็นดัชนีอาเรย์ เงื่อนไขควรทำงานด้วย แต่ฉันไม่ได้ทดสอบทฤษฎีนี้
ปรับปรุง - ตามที่ระบุไว้โดย @ChristopheFerreboeuf ในความคิดเห็นสตริงที่จะไม่ทำงานที่นี่ นี่คืออาร์เรย์และควรเริ่มต้นด้วย0ไม่ใช่สตริงหรือ 1
ภายในruleเราแต่ละคนผ่านสองข้อโต้แย้ง
value- นี่คือค่าfield1ที่ควรจะทำให้เกิดการactionsกำหนดไว้ด้านล่าง
actions- ที่นี่เรามีอาร์เรย์อีกชุด สิ่งเหล่านี้เป็นการกระทำที่จะถูกเรียกเมื่อตรงตามเงื่อนไขของกฎนี้ อีกครั้งactionชื่อของแต่ละคนเป็นเพียงดัชนี / คีย์อาร์เรย์ของรายการนั้น
ตอนนี้แต่ละคนactionมีสองข้อโต้แย้งเช่นกัน (ที่มีตัวเลือกที่ 3)
target- นี่คือองค์ประกอบที่คุณต้องการจัดการภายใต้การกระทำนี้ หากคุณไม่คุ้นเคยกับการจัดองค์ประกอบชื่อ ui_component ใน Magento คุณสามารถตรวจสอบบทความของ Alan Stormได้ มันเป็นอะไรบางอย่าง{component_name}.{component_name}.{fieldset_name}.{field_name}ในตัวอย่างนี้
callback- targetนี่คือการกระทำที่จะต้องดำเนินการเมื่อวันที่ดังกล่าวข้างต้น การเรียกกลับนี้ควรเป็นฟังก์ชันที่มีอยู่ในองค์ประกอบเป้าหมาย ใช้ตัวอย่างของเราและhide showที่นี่คุณสามารถเริ่มขยายการทำงานที่มีอยู่ catalog_rule_form.xmlตัวอย่างที่ผมกล่าวถึงการใช้งานก่อนหน้านี้setValidationหากคุณต้องการดูตัวอย่างที่แตกต่างกัน
- นอกจากนี้คุณยังสามารถเพิ่ม
<params>ไปยังสิ่งactionที่เรียกร้องให้พวกเขา คุณสามารถเห็นสิ่งนี้ในcatalog_rule_form.xmlตัวอย่างได้เช่นกัน
สุดท้ายภายในรายการสุดท้ายคือswitcherConfig <enabled>true</enabled>สิ่งนี้ควรจะตรงไปตรงมามันเป็นบูลีนเพื่อเปิด / ปิดการใช้งานฟังก์ชั่นสลับที่เราเพิ่งใช้
และเราทำเสร็จแล้ว ดังนั้นการใช้ตัวอย่างข้างต้นสิ่งที่คุณควรจะเห็นเป็นฟิลด์field2Depend1ปรากฏขึ้นหากคุณเลือกตัวเลือกที่มีมูลค่า2ในfield1และปรากฏขึ้นหากคุณเลือกตัวเลือกที่มีมูลค่า field3Depend13
ฉันได้ทดสอบตัวอย่างนี้โดยใช้เฉพาะhideและshowในฟิลด์ที่จำเป็นและดูเหมือนว่าจะมองเห็นการตรวจสอบบัญชี กล่าวอีกนัยหนึ่งถ้าfield2Depend1จำเป็นต้องใช้มันจะถูกต้องก็ต่อเมื่อมองเห็นได้ ไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติมสำหรับการทำงาน
หวังว่านี่จะช่วยคุณได้สำหรับทุกคนที่กำลังมองหาวิธีแก้ปัญหาแบบใหม่ ๆ