Skonfigurowałem komponent siatki w Magento - i sortowanie wydaje się zepsute. Gdzie mogę to debugować na poziomie javascript i / lub czy ktoś inny ma pojęcie, dlaczego tak się dzieje?
Jeśli raz posortuję siatkę, zostanie wysłane żądanie ajax i wszystko posortuje się poprawnie.
Jednak drugi sort, bez żądania ajax, renderuje siatkę z tymi samymi identyfikatorami.
To zachowanie nie powtarza się na siatkach rdzenia Magento, więc jestem prawie pewien, że to właśnie robię. Po prostu nie znam systemu komponentu interfejsu użytkownika wystarczająco dobrze, aby wiedzieć, od czego zacząć debugowanie.
źródło
TL; DR
To naprawdę interesujący problem.
Oto jak zrozumiałem system, ale może nie mam 100% racji.
Jak widać kliknięcie kolumny nagłówka generuje żądanie AJAX na następującą trasę:
/admin_key/mui/index/render
z następującymi parametrami:Ostatni to pole, na którym sortujesz siatkę.
Ta trasa jest domyślnie zadeklarowana w
app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
:Ale na liście ui_component XML jest również zadeklarowany:
Ta trasa jest obsługiwana na
app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php
podstawie parametru przestrzeni nazw (który zwykle jest nazwą komponentu interfejsu użytkownika)Jeżeli
prepareComponent
metoda jest rekurencyjna w elementach potomnych:Po przygotowaniu komponentu kolumny sortowanie kolumn jest obsługiwane przez
app/code/Magento/Ui/Component/Listing/Columns/Column.php
:Jeśli
applySorting()
metoda oparta jest na parametrze sortowania i po prostu dodaje zamówienie do dostawcy danych:Po przygotowaniu każdego komponentu klasa akcji renderuje komponent (ponownie rekurencyjnie) dla odpowiedzi:
Sądzę, że są to ważne kroki PHP w tym, co dzieje się podczas sortowania.
Teraz do JS, renderowane i aktualizowane adresy URL (zadeklarowane
definition.xml
powyżej) są przypisane do elementu wapp/code/Magento/Ui/view/base/web/js/form/components/insert.js
:W dalszym ciągu w tym pliku istnieje
requestData
metoda używana do pobierania danych AJAX:Możesz zobaczyć, że ta metoda jest wywoływana, gdy
render()
metoda jest wywoływana:Po wykonaniu tej czynności wywoływana jest metoda wywołania zwrotnego w celu zastosowania danych. To jest
onRender()
:Sądzę, że właśnie tam zastosowano nową treść.
źródło