我觉得我遗漏了一些明显的东西,但是如何从渲染树中删除节点并正确销毁它们?
看起来我可以做类似的事情mainCtx._node._child.splice(2,1)
,但这并不是在所有情况下都有效(Scrollviews 似乎一直存在),并假设 API 中有一些相关的东西,但我似乎找不到它。
我觉得我遗漏了一些明显的东西,但是如何从渲染树中删除节点并正确销毁它们?
看起来我可以做类似的事情mainCtx._node._child.splice(2,1)
,但这并不是在所有情况下都有效(Scrollviews 似乎一直存在),并假设 API 中有一些相关的东西,但我似乎找不到它。
您永远不会删除 renderNodes - 您使用智能 RenderNodes 来操作渲染的内容。
解决方案取决于您要完成的任务:
显示/隐藏/交换部分 RenderTree 的最简单方法是使用RenderController
. 您甚至可以指定输入/输出转换
var renderController = new RenderController();
renderController.show( .... );
renderController.hide( .... );
看官方例子
不要担心删除节点。Famo.us 将为您管理。
如果您想控制渲染节点,请View
使用render
函数编写自定义。Flipper 类是一个简单的示例(而 RenderController 是该模式的一个复杂示例)
深入解释:
RenderNode
都有一个render
创建renderSpec的函数。Modifier
或的信息Surface
。
Modifier
规范用于计算最终的 CSS 属性。Surface
DOM 元素耦合。Engine
,renderSpec都会使用该RenderNode.commit
函数呈现。commit
函数使用ElementAllocator
(from Context
) 来分配/解除分配 DOM 元素。(实际上是回收 DOM 节点以节省内存)因此:只需在您的 custom 中返回正确的renderSpecView
,famo.us 就会为您管理内存和性能。
顺便说一句,您不需要使用View
该类 - 具有render
函数的对象就足够了。该类View
只是添加事件和选项,这是创建封装的、可重用组件的好方法。
ShowModifier (gist)一个简单的修饰符,用于显示/隐藏部分渲染树
var mod = new ShowModifier({visible:true});
mod.visible = true;
mod.show();
mod.hide();
或者,作为替代方案,使用此要点将可见性功能添加到Modifier
和StateModifier
modifier.visibleFrom(function(){ return true; }) // function, getter object or value
stateModifier.setVisible(true); // or false
警告:通过操作渲染规范添加/删除 DOM 节点可能会导致性能损失!