Bu, işe yarayan birden fazla yanıtı olan eski bir sorudur, ancak Magento'nun bileşenlerini genişletmeye gerek kalmadan (2.1.0'dan itibaren) sağladığı şeyi kullanarak bir çözüm keşfettim. Birden fazla soru yinelenen ve burada yönlendirildiği için, bu seçenek hakkında bazı bilgiler vermenin yararlı olacağını düşündüm.
Uzatmak Tüm form elemanı ui bileşenleri Magento_Ui/js/form/element/abstract.js
bir var switcherConfig
elemanlarının yanı sıra diğer eylemleri gösteren / böyle gizleme gibi amaçlar için ayar mevcut. switcher
Bileşen bulunabilir Magento_Ui / js / form / değiştiricinin merak için. Bunun satışlarını sales_rule_form.xml ve catalog_rule_form.xml dosyalarında bulabilirsiniz . Tabii ki kendi özel bileşeninizi zaten kullanıyorsanız, bileşeniniz sonunda abstract
soruda verilen örnek koda dayalı olarak görünen durumda olduğu sürece bunu yine de kullanabilirsiniz .
Şimdi orijinal soruyu cevaplamak için daha spesifik bir örnek.
İçinde Namespace/ModuleName/view/adminhtml/ui_component/your_entity_form.xml
sadece settings
kontrol yapan alanlara (yani hangi alanların gizli / görünür olduğunu belirleyen alan) aşağıdakileri eklemeniz yeterlidir . Örneğinizde bu olurdu 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>
Biraz parçalayalım. switcher
Bileşen dizisi içeriyor rules
biz burada yapıyolar şeydir. Her <rule>
birinin bu örnekte bir sayı olan bir adı vardır. Bu ad, bu öğenin dizi anahtarı / dizinidir. Sayıları dizi dizini olarak kullanıyoruz. Dizeler de çalışmalı ama bu teoriyi test etmedim .
GÜNCELLEME - @ChristopheFerreboeuf tarafından yorumlarda belirtildiği gibi, burada çalışmayan dizeler. Bunlar dizilerdir ve 0
dizelerle veya 1 ile başlamalıdır .
Her birinin içinde rule
iki argüman geçiyoruz.
value
- Bu, aşağıda tanımlanan değeri field1
tetiklemesi gereken değerdir actions
.
actions
- Burada başka bir dizimiz var. Bunlar, bu kuralın koşulları yerine getirildiğinde tetiklenecek eylemlerdir. Yine, her birinin action
adı yalnızca o öğenin dizi dizini / anahtarıdır.
Şimdi her ikisinin action
de iki argümanı var (isteğe bağlı 3.).
target
- Bu, bu eylem altında manipüle etmek istediğiniz unsurdur. Magento'da ui_component eleman adlarının nasıl oluşturulduğunu bilmiyorsanız Alan Storm'un makalesine göz atabilirsiniz . Temel {component_name}.{component_name}.{fieldset_name}.{field_name}
olarak bu örnekteki gibi bir şey .
callback
- Yukarıda belirtilenler için yapılacak işlem target
. Bu geri arama, hedeflenen öğede bulunan bir işlev olmalıdır. Örneğimiz hide
ve kullanır show
. Bu, kullanılabilir işlevselliği genişletmeye başlayabileceğiniz yerdir. Daha catalog_rule_form.xml
önce bahsettiğim setValidation
örnek, farklı bir örnek görmek istiyorsanız kullanır .
- Bunları
<params>
gerektiren herhangi birine de ekleyebilirsiniz action
. Bunu catalog_rule_form.xml
örnekte de görebilirsiniz.
Nihayet son öğe içeride switcherConfig
olduğunu <enabled>true</enabled>
. Bu oldukça basit olmalı, yeni uyguladığımız değiştirici işlevini etkinleştirmek / devre dışı bırakmak için bir Boole.
Ve işimiz bitti. Gördüğünüz gereken yukarıdaki örneği kullanarak alandır field2Depend1
Eğer değerle bir seçenek belirleyin görüntülenir 2
üzerinde field1
ve field3Depend1
sen değerle bir seçenek belirleyin görüntülenir 3
.
Bu örneği sadece hide
ve show
gerekli bir alanda kullanarak test ettim ve doğrulama için görünürlüğü dikkate alıyor gibi görünüyor. Başka bir deyişle, gerekirse field2Depend1
yalnızca görünür olduğunda gereklidir. Bunun çalışması için daha fazla yapılandırmaya gerek yoktur.
Umarım bu daha hazır bir çözüm arayan herkes için biraz yardım sağlar.