View 转换 API
本页用于查询 flor::view 中和控件身份、通用控件对象、子控件序列相关的公开 API。使用教程见 框架 DSL。
导入
ViewBox
ViewBox 是框架内部和容器 API 常用的通用控件对象:
view!(...) 宏会把单个控件转换成 ViewBox,views![...] 宏会生成 Vec<ViewBox>。
ViewIdentity
ViewIdentity 是 builder 读取控件身份的抽象:
当前 View 和 ViewBox 都实现了 ViewIdentity。因此基于 ViewIdentity 的 builder 不只可以用于具体控件,也可以用于通用控件对象,以及返回类型写成 impl IntoView 的控件封装。
常用的 ClassBuilder、LayoutBuilder、EventBuilder、FocusIndexBuilder、DisableBuilder、TransformBuilder、ZIndexBuilder 都通过 ViewIdentity 获取目标控件。
IntoView
IntoView 用于把单个控件转换成 ViewBox:
实现情况:
IntoView 继承 ViewIdentity。如果一个函数返回 impl IntoView,调用方仍然可以继续接常用 builder:
IntoViewIter
IntoViewIter 用于把一个值转换成 ViewBox 迭代器,主要给容器子节点、窗口根视图和 ViewBuilder::views 使用:
实现情况:
这意味着接收 impl IntoViewIter 的 API 可以同时接收单个控件和 views![...] 生成的控件列表:
ViewBuilder
ViewBuilder 给已有控件追加子控件:
views(...) 接收子控件序列;因为单个控件也实现 IntoViewIter,所以它可以接收单个控件或 views![...] 列表。push_view(...) 用于追加一个子控件。
如果是在创建容器时传入初始子控件,优先使用容器构造函数或 views![...]。ViewBuilder 更适合在已经拿到父控件值以后追加子控件。
宏
宏内部调用的是 IntoView::into_view(...),因此每个元素都需要实现 IntoView。

