famo.us - curso - tutorial qgis 2.18 español pdf
¿Cómo eliminar nodos del Árbol de Render? (1)
Nunca eliminas los Nodos de representación: usas Nodos de Representación inteligentes para manipular lo que se representa.
La solución depende de lo que quieras lograr:
1) Quiero manipular el diseño.
La forma más fácil de mostrar / ocultar / intercambiar partes de RenderTree es usar un RenderController
. Incluso puedes especificar transiciones de entrada / salida
var renderController = new RenderController();
renderController.show( .... );
renderController.hide( .... );
Ver el ejemplo oficial.
2) Quiero administrar el rendimiento (y eliminar cosas que no necesito)
No te preocupes por eliminar los nodos. Famo.us se encargará de esto para usted.
Si desea tomar el control de los nodos representados, escriba una View
personalizada con una función de render
. La clase Flipper es un ejemplo simple (y el RenderController es un ejemplo complejo de este patrón)
Explicación en profundidad:
- Cada
RenderNode
tiene una función derender
que crea un renderSpec . - El renderSpec contiene información sobre un
Modifier
oSurface
.- Las especificaciones del
Modifier
se utilizan para calcular las propiedades finales de CSS. - Las especificaciones de
Surface
están acopladas a elementos DOM.
- Las especificaciones del
- Cada marca del
Engine
, el renderSpec se procesa utilizando la funciónRenderNode.commit
. - La función
commit
usa elElementAllocator
(delContext
) para asignar / desasignar elementos DOM. (Que en realidad recicla los nodos DOM para conservar la memoria)
Por lo tanto: simplemente devuelva la especificación de representación correcta en su View
personalizada, y famo.us administrará la memoria y el rendimiento por usted.
Por cierto, no es necesario usar la clase de View
; un objeto con una función de render
será suficiente. La clase de View
simplemente agrega eventos y opciones, lo que es una buena forma de crear componentes encapsulados y reutilizables.
Actualización: Soluciones confeccionadas
ShowModifier (gist) un modificador simple para mostrar / ocultar partes del árbol de representación
var mod = new ShowModifier({visible:true});
mod.visible = true;
mod.show();
mod.hide();
o, como alternativa, use esta información para agregar funciones de visibilidad a Modifier
y StateModifier
modifier.visibleFrom(function(){ return true; }) // function, getter object or value
stateModifier.setVisible(true); // or false
ADVERTENCIA: ¡ Agregar / eliminar nodos DOM mediante la manipulación de la representación puede causar una penalización en el rendimiento!
Siento que me falta algo obvio, pero ¿cómo elimino los nodos del árbol de procesamiento y los destruyo correctamente?
Parece que puedo hacer algo como mainCtx._node._child.splice(2,1)
, pero esto no funciona en todos los casos (las vistas de desplazamiento parecen quedarse), y supongo que hay algo relevante en la API pero puedo No parece encontrarlo.