工厂

工厂可用于生产控件,减少穷举。

使用

在使用工厂属性之前,首先写好控件模板,以下使用该模板进行示例: "template": { "type": "panel", "size": ["100%","100%"] } 之后在需要工厂属性的控件中加入 factory 属性: "test_factory": { "type": "collection_panel", "factory": { "name": "factory_name",// 可自由更改 "control_name": "start.template"// 引用用于生成的子控件 } }

这里使用 collection_panel 作该控件的类型,因为普通的 factory 类型的控件不可以使用绑定。

工厂的子控件生产的数量由属性包的 #collection_length 控制,但不能直接使用属性包属性直接给 #collection_length 设置默认值,我们需要通过使用绑定给工厂设置集合长度。

这里以 toggle 的 #toggle_state 作为简单的布尔值条件,以下是设置集合长度的示例:

"test_factory": { "type": "collection_panel", "factory": { "name": "factory_name",// 可自由更改 "control_name": "start.template"// 引用用于生成的子控件 }, "bindings": [ { "binding_type": "view", "source_control_name": "test_toggle",// toggle 控件名 "source_property_name": "#toggle_state", "target_property_name": "#length" }, { "binding_type": "view", "source_property_name": "(#length * 1)", "target_property_name": "#collection_length" } ] } 提示
#collection_length 属性仅支持整数。
这样,简单的一个带工厂属性的控件就完成啦~

这里还有一些注意事项:

  1. 可以在 factory 属性中加入 max_children_size,来限制工厂最大生成长度。
  2. 在 factory 属性加入 name 主要防止日志报错。
  3. 如果子控件模板不存在或者其他情况下,工厂控件可能会导致闪退等问题。
  4. 若工厂控件不可见,则不会生产控件,因此避免父控件以及工厂控件使用 visible 来控制控件使用可见。

属性

该控件属性仅支持 factory 控件类型。