He configurado un componente de cuadrícula en Magento, y el comportamiento de clasificación parece roto. ¿Dónde puedo depurar esto en el nivel de JavaScript, y / o alguien más tiene alguna idea de por qué esto podría estar sucediendo?
Si clasifico la cuadrícula una vez, se realiza una solicitud ajax y todo se ordena correctamente.
Sin embargo, el segundo tipo, sin una solicitud ajax, representa la cuadrícula con los mismos ID.
El comportamiento no se repite en las cuadrículas centrales de Magento, así que estoy bastante seguro de que esto es algo que estoy haciendo. Simplemente no conozco el sistema de componentes ui lo suficientemente bien como para saber dónde comenzar a depurar esto.
fuente
TL; DR
Este es un problema interesante de hecho.
Así es como entendí el sistema, pero es posible que no tenga el 100% de razón.
Como ha visto, al hacer clic en la columna del encabezado se genera una solicitud AJAX a la siguiente ruta:
/admin_key/mui/index/render
con los siguientes parámetros:El último es el campo en el que está ordenando su cuadrícula.
Esta ruta se declara por defecto en
app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
:Pero en un listado ui_component XML también se declara:
Esta ruta se maneja en
app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php
función del parámetro del espacio de nombres (que normalmente es el nombre de su componente de IU)Donde el
prepareComponent
método es recursivo en los componentes secundarios:Cuando se prepara el componente de columna, la clasificación de columnas se maneja de la siguiente manera
app/code/Magento/Ui/Component/Listing/Columns/Column.php
:Donde el
applySorting()
método se basa en el parámetro de clasificación y simplemente agrega el orden al proveedor de datos:Una vez que cada componente está preparado, la clase de acción representa el componente (nuevamente de forma recursiva) para la respuesta:
Creo que esos son los pasos importantes de PHP de lo que sucede durante la clasificación.
Ahora para el JS, las URL de renderización y actualización (declaradas
definition.xml
anteriormente) se asignan al elemento enapp/code/Magento/Ui/view/base/web/js/form/components/insert.js
:Todavía en este archivo, hay un
requestData
método que se utiliza para recuperar los datos AJAX:Puede ver que se llama a este método cuando se llama al
render()
método:Una vez hecho esto, se llama a un método de devolución de llamada para aplicar los datos. Es
onRender()
:Creo que ahí es donde se aplica el nuevo contenido.
fuente