Data Node 进阶
严格型(Strict)
严格型有哪些类型?
在 Variant.Type枚举 里,
大于 TYPE_NIL 小于 TYPE_OBJECT 的类型,都是严格型。
可用 Gdvm.Utils 的 type_has_strict_data_node 和 instance_has_strict_data_node 判断类型或实例是否为严格型。
列表型(List)与字典型(Dict)
列表型与字典型都实现了数组与字典大部分方法,一些方法的命名会与原版有差异。
详见API注释。
结构型(Struct)
结构型将数据整合成结构体的方式是添加属性,添加属性之后才能分配其值。
var a := Gdvm.DataNodeStruct.new()
a.add_property("name", Gdvm.DataNodeString.new("hello"))
添加的属性可以移除。
a.remove_property("name")
可以添加 计算属性 。
为了作区分,又称狭义的 属性 为 数据属性 。
struct.add_computed_properties(
["a", "b"],
{
"a_plus_b": a_plus_b,
"a_minus_b": a_minus_b
},
func(dependencies: Dictionary, outputs: Dictionary) -> void:
(outputs["a_plus_b"] as DataNode).render(dependencies["a"] + dependencies["b"])
(outputs["a_minus_b"] as DataNode).render(dependencies["a"] - dependencies["b"])
)
计算属性实现了类似Vue的computed功能,会随着所依赖属性的变化重新计算。
add_computed_properties 方法接受三个参数:
依赖属性列表
计算属性列表
计算属性的计算函数
依赖属性必须已存在于结构体中。
计算属性接受一个字典,键是要定义的计算属性,值是计算属性的DataNode。
计算属性的计算函数接收两个参数:
第一个参数是所依赖属性的字典,键为依赖项,值为依赖项的值(不会暴露依赖项的DataNode,保证只读); 第二个参数是计算属性的字典,键为计算属性,值为计算属性的DataNode,计算函数应当直接将结果渲染给计算属性。
值
结构型的 值 是一个字典,键为属性,值为属性的值。
取值会得到所有数据属性和计算属性,而渲染只会渲染数据属性。
节点型(Node)
节点型节点就是一个结构型节点聚合了一个列表型节点。
为了不与任何属性重名,节点的子节点列表是通过方法( children() )获取的。
节点的值是内部定义的 NodeDataBucket 类型。
渲染函数可接受 NodeDataBucket 类型,同时渲染属性和子节点;
也可仅接受字典或对象,仅渲染属性;
也可仅接受列表,仅渲染子节点。