Comportamiento extraño de carga de árbol de ExtJS 4

Tengo un panel de árbol que usa una tienda ajax. Cuando el servidor obtiene resultados para un nodo, generalmente no es instantáneo (toma unos segundos).

Tengo otro control de cuadrícula que recarga el nodo raíz (dependiendo de diferentes parámetros)

Esto puede causar un comportamiento extraño cuando se envía una solicitud antes de que se complete la anterior:

  1. Un usuario selecciona algo en la cuadrícula, lo que hace que el árbol envíe una solicitud
  2. Antes de que se complete la solicitud anterior, el usuario cambia algo que hace que se envíe una nueva solicitud
  3. El árbol comienza a tener problemas al expandir los nodos después de que se completen ambas solicitudes.

¿Hay alguna forma de anular todas las solicitudes pendientes enviadas por la tienda del árbol antes de volver a cargar el árbol?

¡Gracias de antemano por tu ayuda! Amitay.

PD: ExtJS versión 4.1.1

preguntado el 26 de agosto de 12 a las 09:08

Por lo tanto, el contenido del árbol puede volver a cargarse con datos diferentes mientras se realiza una solicitud del servidor sobre los datos anteriores. ¿Es esto lo que estás tratando de prevenir? ¿Puede explicar por qué recarga el nodo raíz? -

Esto es en realidad una cuadrícula de árbol (no un árbol simple). Lo uso para un tablero en mi aplicación, que muestra varias métricas. Gracias al árbol, el usuario puede profundizar para ver los datos en detalle. Cuando el usuario selecciona una métrica para mostrar, el árbol debe volver a cargarse para reflejar la selección del usuario. El problema ocurre cuando el usuario selecciona algo y cambia su selección antes de que la anterior haya terminado de cargarse. -

1 Respuestas

Agregar datos a un almacén de árboles es un asunto complicado. El marco hace muchas cosas en un esfuerzo por mantener las cosas alineadas cada vez que carga o carga datos en el almacén del árbol. Como ejemplo, intente agregar un registro a una tienda de árbol que ya existe en un árbol en otro lugar. Si las identificaciones de los registros son duraderas (es decir, establecidas desde el servidor), entonces todo se desata. Esto se debe a que una tienda de árboles tiene maquinaria complicada y es posible que no se ajuste a todos los casos de uso.

Por lo tanto, no es de extrañar que si dos solicitudes en competencia intentan cargar datos en el almacén del árbol, las cosas no funcionarán bien. ¿Qué se puede hacer?

  1. Cargar máscara. Cuando se expande una rama de árbol, la máscara de carga debe cubrir el árbol para ocultar cualquier otro control. Esto ayuda a evitar la manipulación simultánea de datos. En 4.1.1 esto realmente funciona OOTB (estaba roto antes).

  2. Si está permitiendo que los controles externos influyan en el árbol, mire la propiedad 'cargando' http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Store-property-loading . Verificar la carga debería evitar que se lleve a cabo otra acción. Hay un método de 'abortar' en la conexión de datos para cancelar la solicitud pendiente, si así lo desea.

  3. Finalmente, mire la propiedad autoAbort en la conexión de datos: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Connection-cfg-autoAbort Esto eliminará todas las demás solicitudes pendientes, podría ser lo que está buscando.

Respondido 26 ago 12, 21:08

Hola Dmitri, gracias por tu respuesta. 1. Esto funcionará, pero no quiero limitar al usuario. Prefiero abortar todas las solicitudes enviadas por el árbol. No puedo encontrar una manera de rastrear estas solicitudes. 2. Sí, quiero usar el método 'abortar'; sin embargo, ¡no puedo encontrar una manera de acceder a la solicitud que estoy tratando de abortar! ¿Alguna sugerencia? 3. Esto eliminará TODAS las solicitudes, ¿no? (no solo los relacionados con la tienda de árboles) Gracias de nuevo por tu ayuda, Amitay. - amitayh

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.