You never remove renderNodes - you use smart RenderNodes to manipulate what is rendered.
The solution depends on what you want to accomplish:
1) I want to manipulate the layout
The easiest way to show / hide / swap parts of the RenderTree is to use a RenderController
. You can even specify in/out transitions
var renderController = new RenderController();
renderController.show( .... );
renderController.hide( .... );
See the official example
2) I want to manage performance (and remove stuff I don't need)
Don't worry about removing nodes. Famo.us will manage this for you.
If you want to take control of rendered nodes, write a custom View
with a render
function. The Flipper class is a simple example (and the RenderController is a complex example of this pattern)
In depth explanation:
- Every
RenderNode
has a render
function which creates a renderSpec.
- The renderSpec contains information about a
Modifier
or Surface
.
- The
Modifier
specs are used to calculate the final CSS properties.
- The
Surface
specs are coupled to DOM elements.
- Every tick of the
Engine
, the renderSpec is rendered using the RenderNode.commit
function.
- The
commit
function uses the ElementAllocator
(from the Context
) to allocate/deallocate DOM elements. (Which actually recycles DOM nodes to conserve memory)
Therefore: Just return the correct renderSpec in your custom View
, and famo.us will manage memory and performance for you.
BTW, you don't need to use the View
class - an object with a render
function will suffice. The View
class simply adds events and options which is a nice way to create encapsulated, reusable components.
Update: Ready-made Solutions
ShowModifier (gist) a simple modifier to show/hide parts of the rendering tree
var mod = new ShowModifier({visible:true});
mod.visible = true;
mod.show();
mod.hide();
or, as alternative, use this gist to add visibility functions to Modifier
and StateModifier
modifier.visibleFrom(function(){ return true; }) // function, getter object or value
stateModifier.setVisible(true); // or false
WARNING: Adding/removing DOM-nodes by manipulating the renderspec might cause a performance penalty!