Saya telah mengkonfigurasi komponen grid di Magento - dan perilaku penyortiran tampaknya rusak. Di mana saya bisa men-debug ini pada tingkat javascript, dan / atau apakah ada orang lain yang tahu mengapa ini mungkin terjadi?
Jika saya mengurutkan grid sekali, permintaan ajax dibuat, dan semuanya mengurutkan dengan benar.
Namun, jenis kedua, tanpa permintaan ajax, menjadikan kisi-kisi dengan semua ID yang sama.
Perilaku ini tidak terulang pada grid inti Magento, jadi saya cukup yakin ini adalah sesuatu yang saya lakukan. Saya hanya tidak tahu sistem komponen ui cukup baik untuk mengetahui di mana harus mulai debugging ini.
sumber
TL; DR
Ini memang masalah yang menarik.
Inilah cara saya memahami sistem tetapi saya mungkin tidak 100% benar.
Seperti yang Anda lihat mengklik kolom tajuk menghasilkan permintaan AJAX ke rute berikut:
/admin_key/mui/index/render
dengan parameter berikut:Yang terakhir adalah bidang tempat Anda menyortir kisi Anda.
Rute ini dinyatakan secara default di
app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
:Tetapi dalam daftar XML ui_component juga dinyatakan:
Rute ini ditangani
app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php
berdasarkan parameter namespace (yang biasanya nama Komponen UI Anda)Di mana
prepareComponent
metode ini bersifat rekursif pada komponen anak:Ketika komponen kolom disiapkan, penyortiran kolom ditangani oleh
app/code/Magento/Ui/Component/Listing/Columns/Column.php
:Di mana
applySorting()
metode ini didasarkan pada parameter pengurutan dan itu hanya menambahkan urutan ke penyedia data:Setelah setiap komponen disiapkan, kelas tindakan membuat komponen (lagi secara rekursif) untuk respons:
Saya rasa itu adalah langkah-langkah PHP penting dari apa yang terjadi selama penyortiran.
Sekarang untuk JS, render dan pembaruan URL (dideklarasikan di
definition.xml
atas) ditugaskan ke elemen diapp/code/Magento/Ui/view/base/web/js/form/components/insert.js
:Masih dalam file ini, ada
requestData
metode yang digunakan untuk mengambil data AJAX:Anda dapat melihat bahwa metode ini dipanggil ketika
render()
metode ini disebut:Setelah ini dilakukan, metode panggilan balik dipanggil untuk menerapkan data. Itu adalah
onRender()
:Saya rasa di situlah konten baru diterapkan.
sumber