Data Node 进阶

严格型(Strict)

严格型有哪些类型?

Variant.Type枚举 里, 大于 TYPE_NIL 小于 TYPE_OBJECT 的类型,都是严格型。

可用 Gdvm.Utilstype_has_strict_data_nodeinstance_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 方法接受三个参数:

  1. 依赖属性列表

  2. 计算属性列表

  3. 计算属性的计算函数

依赖属性必须已存在于结构体中。

计算属性接受一个字典,键是要定义的计算属性,值是计算属性的DataNode。

计算属性的计算函数接收两个参数:

第一个参数是所依赖属性的字典,键为依赖项,值为依赖项的值(不会暴露依赖项的DataNode,保证只读); 第二个参数是计算属性的字典,键为计算属性,值为计算属性的DataNode,计算函数应当直接将结果渲染给计算属性。

结构型的 是一个字典,键为属性,值为属性的值。

取值会得到所有数据属性和计算属性,而渲染只会渲染数据属性。

节点型(Node)

节点型节点就是一个结构型节点聚合了一个列表型节点。

为了不与任何属性重名,节点的子节点列表是通过方法( children() )获取的。

节点的值是内部定义的 NodeDataBucket 类型。

渲染函数可接受 NodeDataBucket 类型,同时渲染属性和子节点; 也可仅接受字典或对象,仅渲染属性; 也可仅接受列表,仅渲染子节点。