【Blockly开发教程】06 Workspace概念

本文详细介绍了Blockly中的Workspace,包括其概念、组成、作用和创建方法。讲解了如何保存和加载工作区数据,涉及序列化和反序列化过程,并提供了相关代码示例。此外,还提及了工作区的其他功能和扩展性。
摘要由CSDN通过智能技术生成

你将收获

如何配置和使用workspace。

Workspace

Workspace是什么

在Blockly中,Workspace 是一个核心功能,代表了一个用户可以操作和编程的环境,类似于vscode的文件编辑器部分。它是构建程序逻辑的画布,用户可以在其中拖拽、连接和配置各种编程块(blocks)。每个Workspace提供了一个独立的编程空间,允许用户创建和管理自己的程序结构。

Workspace组成

一个Workspace通常包含以下几个主要部分:

  • 工具箱(Toolbox):包含了一系列积木块的分类列表,用户可以从这里选择所需的块。
    在这里插入图片描述
  • 主工作区:用户将工具箱中的块拖拽到这个区域,构建程序逻辑。
    在这里插入图片描述
  • 分类抽屉(Flyout):当工具箱以抽屉形式展示时,用户可以从这里访问更多的块。
    在这里插入图片描述
    flyout中,也有一个工作区(Workspace),但是这个工作区不是主工作区,它的作用是展示积木块,而不可用于搭建程序逻辑。
    在这里插入图片描述
  • 工作区背景:提供视觉背景,帮助用户更清晰地识别和管理自己的代码结构。
  • 滚动条:如果Workspace内容超过可视区域,滚动条允许用户滚动查看全部内容。
  • 缩放控件:用户可以通过缩放控件调整Workspace的显示大小。
  • 垃圾桶:用户可以将块拖到垃圾桶图标上来删除块。
    在这里插入图片描述

Workspace作用

Workspace是Blockly编辑器的核心部件,主要作用包括:

  • 程序构建:用户通过拖拽和连接块来构建程序的逻辑结构。Workspace提供了一个直观的界面,让用户能够轻松编辑和调整代码。
  • 代码组织:用户可以在Workspace中整理和重组代码块,优化程序结构。
  • 多用户协作:在某些配置下(如需要云服务器支持),Workspace支持多用户同时工作,促进协作编程。
  • 功能扩展:通过添加插件或扩展,可以增强Workspace的功能,比如添加新的编程块或工具。
  • 序列化/反序列化:将Workspace的数据导出为文件,或导入文件来加载已保存的Workspace数据。

创建Workspace

通过Blockly.inject方法创建Workspace:

workspace = Blockly.inject('blocklyDiv', options);
  • options 在前面的文章中有提到过:
    // blockly/core/blockly_options.ts
    export interface BlocklyOptions {
         
      collapse?: boolean;	// 是否允许块的折叠以隐藏其内容。
      comments?: boolean;  	// 是否允许用户在块上添加注释。
      css?: boolean;	// 是否自动添加CSS样式到页面。
      disable?: boolean;	// 是否禁用工作区,使所有块不可编辑。
      grid?: GridOptions;	// 网格线的配置选项,如是否显示网格线和网格线的间隔。
      horizontalLayout?: boolean;	// 是否将工具箱和工作区水平布局。
      maxBlocks?: number;	// 工作区中允许的最大块数量。
      maxInstances?: {
         [blockType: string]: number};	// 特定块类型的最大实例数,以对象形式指定。
      media?: string;	// 加载媒体资源(如块定义和工具箱)的路径。
      modalInputs?: boolean;	// 是否使用模态对话框来编辑输入值。
      move?: MoveOptions;	// 块的移动选项,如是否启用拖放功能。
      oneBasedIndex?: boolean;	// 是否使用基于1的索引,默认为基于0的索引。
      readOnly?: boolean;	// 是否将工作区设置为只读模式。
      renderer?: string;	// 指定使用哪个渲染器来渲染块。
      rendererOverrides?: {
         [rendererConstant: string]: any};	// 用于覆盖特定渲染器设置的对象。
      rtl?: boolean;	// 是否启用从右到左的布局。
      scrollbars?: ScrollbarOptions | boolean;	// 工作区滚动条的行为配置,可以是一个对象或布尔值。
      sounds?: boolean;	// 是否启用声音效果。
      theme?: Theme | string | ITheme;	// 应用到Blockly编辑器的主题,可以是主题对象、主题名称的字符串或ITheme接口的实现。
      toolbox?: string | ToolboxDefinition | Element;	// 工具箱的内容,可以是一个XML字符串、工具箱定义对象或DOM元素。
      toolboxPosition?: string;	// 工具箱的位置,可以是'start'(左侧)或'end'(右侧)。
      trashcan?: boolean;	// 是否在工作区显示垃圾桶图标。
      maxTrashcanContents?: number
  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bright_Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值