跳到主要内容

资源、控件与场景

本文档为 AppStudio 资源及控件体系的介绍文档,用户可阅读该文档学习资源及控件之间的区别和联系,利用资源及控件体系灵活、快速地构建应用。

AppStudio 提供了一套以资源控件为核心的应用构建系统。用户可使用资源、控件对应用的灵活维护和管理,进而实现各种高级应用功能。

资源

资源即资源标签页中的变量和函数资源。

变量

变量是指作用于整个应用的全局变量。

变量资源
变量资源

函数

函数是指 FuncStudio 中的函数项目,函数的输入参数和输出结果可以和控件属性绑定,实现在 AppStudio 中远程调用函数并展示计算结果。

函数资源
函数资源

控件

控件是构建应用场景时所用到的可交互组件,通过拖拽控件在场景中构建用户可交互和数据可视化面板,控件的可配置项包括属性和 布局

属性

属性是定义及描述控件交互及可视化效果的度量数据,控件的属性主要有样式、内容、事件三部分。

控件的属性
控件的属性
  • 样式属性:包括通用样式、样式、标签样式、内容样式四部分,用于指定控件的大小、外观、颜色及字体;

  • 内容属性:内容属性是一个控件的核心,用于指定控件具备的功能参数,比如输入框控件中输入的值选择器的可选项盒子控件中展示的内容等。

输入框控件的内容参数
输入框控件的内容参数
  • 事件参数:包括控件支持的事件,如点击事件、更改事件等,当这些事件触发后,开始执行事件属性栏内的表达式,实现控件赋值、回调资源数据、切换场景等目的,详见 事件触发机制

资源、控件设置

变量资源的值和函数资源的参数在资源标签页里设置;每一个控件都有一个属性配置面板,可以对它的样式、内容、事件等属性进行设置,控件属性的值支持 (x)“值”模式和 f(x) “表达式” 模式这两种输入类型,用户可随时切换输入类型,适配不同场景构建需求。

“值”模式

点击控件属性值输入框右侧,切换到显示 (x) 时,此时为“值”模式输入,只能输入一个常量。

“表达式”模式

切换到显示 f(x) 时,此时为“表达式”模式输入,可以直接引用其他的控件属性或资源的值作为属性值,同时表达式也支持 math.js 数学库。

关于更多的 math.js 用法可以学习 math.js 表达式

两种输入模式对比
两种输入模式对比

在表达式输入模式下,选中输入框后,按 Ctrl 键可呼出输入框的扩展编辑界面。在扩展编辑界面中,支持输入和编辑多行复杂表达式。

扩展编辑界面
扩展编辑界面
提示

切换到表达式模式下输入栏的边框会变成黄色,边框为黄色的输入栏只能输入表达式。

从表达式模式切换回值模式时原本输入的表达式会丢失。

输入框会自动检查表达式的状态,若表达式输入有误,选中输入栏后,会在最右侧出现报错提示,鼠标悬浮到上面会显示报错信息;若表达式输入正确,会在最右侧自动计算出表达式的当前值。

表达式模式的实时校验机制
表达式模式的实时校验机制

变量资源设置

点击资源标签页,点击新建资源,选择变量资源,然后填写变量名和变量的值即可。变量的值可以被控件的属性引用或修改。

变量设置需要注意以下几点要求:

  • 变量名应以字母或 _ 符号开头,每个变量名称都应是唯一的;

  • 变量的值仅支持值模式输入

函数资源设置

点击资源标签页,点击新建资源,选择函数资源,然后填写函数名,选择函数 RID ,配置函数的参数方案的值。函数输出参数的值可以被控件的属性引用或修改。

函数设置需要注意以下几点要求:

  • 函数名应以字母或 _ 符号开头,每个函数名都应是唯一的;

  • 函数输入参数值支持值/表达式模式输入,不能引用变量的值进行赋值;

函数资源支持的接口如下表所示:

接口作用示例
args获取函数资源的输入参数$函数名称.args.参数键
content获取函数中某条指定 key 的输出结果$函数名称.value.key.content
runninng函数是否在执行中,若在执行中值为 1 ,否则值为 0$函数名称.running
progress获取函数的执行进度,0-1$函数名称.progress
status获取函数的运行状态,返回 waiting/resolved/rejected,分别表示等待/结束/中止$函数名称.status
start()启动函数任务$函数名称.start()
terminate()终止函数任务$函数名称.terminate()
job.id获取函数任务实例id$函数名称.terminate()

控件属性设置

在场景标签页选中控件后,在右侧的属性标签,即可对控件属性进行设置。

控件属性设置需要注意以下几点要求:

  • 控件名应以字母或 _ 符号开头,同一场景下不同控件的名称必须唯一,不场景下的控件名称可以重复;

  • 控件属性值支持值/表达式模式输入,被引用属性的控件必须命名。

可以引用资源或者其他属性作为控件属性值。

引用变量设置属性

在控件属性中引用变量值作为属性值时,输入栏应切换到表达式模式,且在变量前冠以 $ 标识符为前缀,例如变量名为 a 时,引用该变量值时应切换为表达式输入模式,填写 $a.value 的表达式。

变量值的引用
变量值的引用

引用函数设置属性

引用函数输入参数值

在控件属性中引用函数输入参数的值作为属性值时,输入栏应切换到表达式模式,且在变量前冠以 $ 标识符为前缀,例如函数名为 adder 时,引用键为 a 的参数值时应切换为表达式输入模式填写 $adder.args.a 的表达式。

函数输入参数的引用
函数输入参数的引用
引用函数输出结果

函数输出结果有 log、plot 和 table 三种类型,对于 log 类型的输出结果,可以被直接引用为控件属性。

例如,在 Markdown 文本框控件的值属性或盒子控件的内容属性中,输入 $函数名称.value.key.content 的表达式,其中 key 为 log 消息的 key 参数,此时 Markdown 文本框和盒子内展示内容就是函数的文本结果。

log 消息的引用
log 消息的引用

对于 plot 和 table 类型的结果,只能用运行结果控件来引用展示。

将运行结果控件的内容/结果 ID属性的输入框切换到表达式模式,输入 $函数名称.job.id 的表达式,绑定为某函数结果的展示面板;

消息 key消息类型属性用于过滤输入结果,如果函数的输出结果的有很多条,并且给每条都设定了一个 key, 为了快捷输出特定的结果,可以在消息 key 属性中输入该结果的 key 值。

也可在消息类型属性中配置结果类型,将 log、plot、table 中某一类结果全部展示。

plot和table类型消息的引用
plot和table类型消息的引用

引用函数运行信息

$函数名称.running→函数是否在运行中,值为 0 或 1;

$函数名称.progress→获取函数的执行进度;

$函数名称.status→获取函数运行结状态,返回 waiting/resolved/rejected。

例如:在按钮控件的内容/禁用属性输入框中输入 $资源函数名.running 的表达式,如果函数正在执行,则返回值为 1,此时禁用生效,用户无法再次点击按钮;

待函数运行结束,值变为 0,不再禁用,用户可以再次点击按钮启动函数,避免用户短时间内多次点击按钮执行计算。

引用函数运行信息
引用函数运行信息

引用属性设置属性

控件属性值可以通过 控件名.属性键值 的表达式来获取,将鼠标悬停在控件属性栏上,属性的键值会自动显示在左侧,例如在盒子控件的内容属性中引用名为 InputBox1 的输入框控件的值属性作为内容属性的当前值。

引用属性设置属性
引用属性设置属性

常见问题

为什么输入的表达式无效?

表达式必须在 f(x) 模式下输入,引用控件属性时确保控件名和属性键名正确。

引用函数资源的任务实例的表达式校验不通过,影响函数的执行吗?

由于函数还没被执行,暂时无法被识别。因此,即便此处报错,若表达式本身是正确的,则不影响执行。

常见的调试技巧
  • 善用控件属性栏的实时计算功能,利用提示信息,对除函数输出结果以外其他数据绑定关系进行快速调试;

  • 善用消息过滤调试技巧,在运行结果框中不指定 key 和类型的话,会输出全部执行结果,因此,再调试状态下可以不过滤任何信息,先把全部结果信息输出。