# 块状态

块实例有一组状态属性,用于控制用户可执行的操作。
这些状态可以在块定义中设置,也常用于根据业务规则限制工作区内块的行为,或聚焦用户操作范围(如教程场景)。

# 可删除状态

block.setDeletable(false);

当设置为 false 时,用户不能删除该块。
在可编辑工作区中,块默认可删除。

即使块不可删除,也可以通过代码删除:

block.dispose();

# 可编辑状态

block.setEditable(false);

当设置为 false 时,用户不能修改块字段(如下拉框、文本输入)。
在可编辑工作区中,块默认可编辑。

# 可移动状态

block.setMovable(false);

当设置为 false 时,用户不能直接拖动该块。
若一个不可移动块是其他块的子块,则不能把它从父块上直接拆下;但移动父块时它会跟随移动。
在可编辑工作区中,块默认可移动。

即使块不可移动,只要它已经在工作区中,仍可通过代码移动:

block.moveBy(dx, dy);

块放入工作区后的默认起始位置是 (0, 0)

# 块数据

block.data = '16dcb3a4-bd39-11e4-8dfc-aa07a5b093db';

data 是附加在块上的可选字符串,可存放任意业务数据。
块序列化时会一并保存这段数据,包括复制、粘贴和克隆时。

常见用法是把块与外部资源建立关联。

序列化为 JSON 时,data 会作为块的顶层属性保存:

{
  "type": "my_block",
  "data": "16dcb3a4-bd39-11e4-8dfc-aa07a5b093db"
}

序列化为 XML(旧的冻结序列化体系)时,data 存在块内部的 <data></data> 标签中:

<block type="my_block">
  <data>16dcb3a4-bd39-11e4-8dfc-aa07a5b093db</data>
</block>