工厂可用于生产控件,减少穷举。
使用
在使用工厂属性之前,首先写好控件模板,以下使用该模板进行示例:
"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 属性仅支持整数。
这样,简单的一个带工厂属性的控件就完成啦~
这里还有一些注意事项:
- 可以在 factory 属性中加入 max_children_size,来限制工厂最大生成长度。
- 在 factory 属性加入 name 主要防止日志报错。
- 如果子控件模板不存在或者其他情况下,工厂控件可能会导致闪退等问题。
- 若工厂控件不可见,则不会生产控件,因此避免父控件以及工厂控件使用 visible 来控制控件使用可见。
属性
该控件属性仅支持 factory 控件类型。