一个初学者的问题。我正在尝试建立一个 famo.us 应用程序。到目前为止,我在一个简单的实验中取得了不错的结果。
现在我的应用程序正在增长,我想允许在“屏幕”之间移动:登陆屏幕 -> 信息屏幕 -> 返回登陆屏幕 -> 等等。
我的“屏幕”View()
在 View() 中添加了表面、修改器等
我用它和功能RenderController()
在屏幕之间切换。hide()
show()
问题是当返回到以前使用的屏幕时,表面不再出现!
代码 :
var app_render_controller = new RenderController();
app_render_controller.show(landing_screen); // ok
app_render_controller.hide(landing_screen); // ok
app_render_controller.show(info_screen); // ok
app_render_controller.hide(info_screen); // ok
app_render_controller.show(landing_screen); // NOK -> I only see my background surface !
在检查 DOM 时,我能够在它们应该在的位置看到我的表面的轮廓,但它们是隐藏的。似乎背景表面现在位于内容表面(ScrollView)的前面。如果我隐藏背景,我会再次看到 Scrollview。
我读到元素的重叠与它们添加到渲染树的顺序相对应。因此,由于我的基于 View() 的“屏幕”下的树没有改变,滚动视图仍应像第一次一样绘制在背景之上?
这是预期的吗?难道我做错了什么 ?我错过了什么吗?
- - - - 编辑 - - -
我的代码(大致):
var main_context = Engine.createContext();
var root_render_controller = new RenderController();
main_context.add(root_render_controller);
var landing_screen = new View();
landing_screen.add(new Surface(...background texture...));
var scrollview = new Scrollview();
landing_screen.add(scrollview);
// (add stuff to the scrollview)
var info_screen = new View();
info_screen.add(new Surface(...background texture...));
info_screen.add(new Surface(...some message...));
root_render_controller.show(landing_screen);
// display is fine
root_render_controller.hide(landing_screen);
root_render_controller.show(info_screen);
// display is fine
root_render_controller.hide(info_screen);
root_render_controller.show(landing_screen); // again
// display is wrecked : the background surface is now hiding the scrollview !
在查看 DOM 时,我们可以看到翻转: