นี่เป็นคำถามเก่าที่มีหลายคำตอบที่ใช้งานได้ แต่ฉันได้ค้นพบวิธีแก้ปัญหาโดยใช้สิ่งที่ 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
และปรากฏขึ้นหากคุณเลือกตัวเลือกที่มีมูลค่า field3Depend1
3
ฉันได้ทดสอบตัวอย่างนี้โดยใช้เฉพาะhide
และshow
ในฟิลด์ที่จำเป็นและดูเหมือนว่าจะมองเห็นการตรวจสอบบัญชี กล่าวอีกนัยหนึ่งถ้าfield2Depend1
จำเป็นต้องใช้มันจะถูกต้องก็ต่อเมื่อมองเห็นได้ ไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติมสำหรับการทำงาน
หวังว่านี่จะช่วยคุณได้สำหรับทุกคนที่กำลังมองหาวิธีแก้ปัญหาแบบใหม่ ๆ