【界面设计器】组件开发常见问题

如何获取当前页面中的全部可用字段?

Class Component(ts)中使用以下代码获取当前设计组件实例

``` ts
import { WidgetInstance } from '@kunlun/ui-designer-dependencies';

@Widget.Reactive()
@Widget.Inject()
protected currentInstance: WidgetInstance | undefined;
```

PS:这里使用了@kunlun/ui-designer-dependencies依赖包中的类型定义,但没有使用函数,因此这个导入是可以正常执行的。

Vue组件中使用以下代码获取可选字段列表

``` ts
import { WidgetInstance } from '@kunlun/ui-designer-dependencies';

// props add currentInstance define
props: {
currentInstance: {
type: Object as PropType<WidgetInstance>
}
}

// setup using currentInstance get fields
const fields = computed(() => {
return Array.from(props.currentInstance?.root?.fieldCollection.values() || []).map((v) => {
return {
label: v.element?.widgetData?.displayName,
value: v.element?.name
};
});
});
```

PS:这里的v.element?.widgetData?.displayName获取的是字段的元数据显示名称,如果需要获取字段输入的标题可以使用v.element?.properties?.label

为什么需要选择当前页面中的字段?

页面在发起请求时,会根据当前视图中的字段查询最小结果集,不在页面中的字段无法被正确获取。可以将用到的字段拖放至视图中,并使用【隐藏】属性进行隐藏即可。

列内容超过当前表格行高该怎么办?

在界面设计器中选中表格组件,可以为表格设置指定的行高。

在界面设计器的属性面板组件中,如何获取当前字段所在模型的模型编码?

``` ts
interface InternalMetadata {
model?: string;
}

@Widget.Reactive()
protected get currentModel(): string | undefined {
return (this.formData._metadata as InternalMetadata)?.model;
}
```

在界面设计器的属性面板组件中,如何获取关联关系字段的关联模型的模型编码?

``` ts
interface InternalMetadata {
modelReferences?: {
model?: string;
};
}

@Widget.Reactive()
protected get referenceModel(): string | undefined {
return (this.formData._metadata as InternalMetadata)?.modelReferences?.model;
}
```

如何理解关联关系字段中的【透出字段(选项字段列表)】属性?

正如我们现在已知的,页面发起查询请求时,将根据页面中的元数据获取最小结果集,不在页面中的字段并不包含在结果集中。这样虽然使得我们可以最小化的控制结果集的大小。

但对于关联关系类型的字段来说,我们也面临了一个无法回避的问题:对于【表格】、【表单】等这些组件,我们可以通过拖放字段的方式直接将字段展示在页面中,因此对于这些可被设计的组件而言无需其他过多的配置即可正常使用。但对于【下拉单选】、【下拉多选】等这些组件而言,我们无法在页面中直接定义关联关系字段的元数据。

我们在解决这一问题上也同样做了很多,比如当你在【下拉单选】中设置【选项标题】时,选项标题中的字段会被自动透出到页面中,在发起请求时也就能正常获取这些字段了。

特殊的是,如果某些字段只是在逻辑上被使用的,但又不能将其通过【选项标题】展示给用户的时候,我们必须使用一个属性来定义这些字段,使得我们的业务逻辑可以正常运行。因此,我们设计了【透出字段】来解决这一问题。

为什么在属性面板中的【选项字段列表】是【透出字段】呢?

正如我们在业务开发过程中,服务端的模型定义的显示名称和在界面设计器中的字段标题可以是不一致的。由于服务端模型定义的字段API名称为optionFields,其中文直译是【选项字段列表】,但我们在产品设计时,希望这一属性可以被用户理解,因此在页面上展示的时候使用了【透出字段】作为标题呈现给用户。

在界面设计器中如何配置【透出字段(选项字段列表)】?

optionFields在配置时使用的是字段的API名称,在关联关系属性定义时,允许使用.分隔的方式定义关联关系字段的关联属性。

如:['code', 'name', 'user.code', 'user.name']。
其中user字段为多对一(M2O)的关联关系字段,其中有两个字段codename

与之对应的GQL响应结构为:

query {
    xxxxxxQuery {
        queryPage(xxxxxx) {
            content {
                code
                name
                user {
                    code
                    name
                }
            }
        }
    }
}

在界面设计器的属性面板组件中,如何通过代码方式设置【透出字段(选项字段列表)】?

@Widget.Method()
public setOptionFields(optionFields: string[]) {
  this.formData.optionFields = optionFields;
}

如何在字段中使用mountedCallChaining提供mountedProcess方法?

@Widget.Reactive()
@Widget.Inject()
protected mountedCallChaining: CallChaining | undefined;

protected mountedProcess() {}

protected mounted() {
  super.mounted();
  this.mountedCallChaining?.hook(this.path, async () => {
    await this.mountedProcess();
  });
}

protected unmounted() {
  super.unmounted();
  this.mountedCallChaining?.unhook(this.path);
}

Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/oinone-faq/58.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
nation的头像nation数式员工
上一篇 2023年6月20日 pm4:07
下一篇 2023年11月2日 pm1:58

相关推荐

  • 切换数据库注意事项

    以下操作需注意: 手动定义columnDefinition导致重复执行ddl。如pgsql中decimal类型自动转换为numeric类型。 使用Mybatis Plus原生Page对象进行分页查询。 使用distinct/group by/join等查询导致分页报错。 启动创建数据库时未支持驱动参数。 场景 1:URL 缺少关键参数 场景 2:使用了不支持的 JDBC 驱动版本 数据库函数/数据库关键字意外识别为列导致的查询失败。 自定义sql查询时出现字段名称未正确映射为小驼峰字段导致的无法获取数据。

    2024年12月4日
    59800
  • 请确认函数是否存在报错排查路径

    当函数不存在的时候,可能有的原因如下:先确认引入启动环境: 是否引入distribution-session包?(Y/N) 如果 distribution-session 包被引入,可能的原因如下: 先检查 base_function 根据 namespace 和 fun 检查函数是否存在,如果存在,检查 openLevel 是否包含 API 级别(二进制值为 14/12/8)。 在 base_model_data 中根据 res_id 检查 load_module,同一环境中所有jvm服务,加载模块必须在启动模块或启动模块的依赖模块中。 检查 redis 中 base.Model:${modelModel}:model_model 键值是否存在,如果存在,根据函数关键字尝试搜索。 如果上面三步没有找到问题,且所有元数据都存在。distribution-session 包可能没有引入,确认是否需要使用 distribution-session 包。 如果 distribution-session 包没有被引入,可能的原因如下: 先检查 base_function 根据 namespace 和 fun 检查函数是否存在,如果存在,检查 openLevel 是否包含 API 级别。 在 base_model_data 中根据 res_id 检查 load_module,加载模块必须在启动模块中。 自定义gql进行请求报函数是否存在可能的原因 检查Gql请求是否符合规范:参考文章GraphQL Service检查请求类型query/mutation是否和函数定义一致。

    2025年8月29日
    50100
  • 组件问题

    2022年2月12日
    82800
  • 数据大屏如何绑定页面

    第一步:数据可视化创建大屏。 第二步:界面设计器创建页面,在页面设计时,拖一个数据大屏组件,将大屏绑定到页面中,点击右上角显示母版,准备将页面绑定到菜单上。 第三步:在oinone功能展示应用下,创建一个菜单,点击绑定当前页面,将该页面绑定到菜单上,点击发布。 第四步:进入刚才菜单所属的应用(oinone功能展示),可以看到刚刚新增的菜单,数据大屏就成功绑定到页面上了。

    2024年12月11日
    52900
  • 无代码启动常见问题

    1、执行yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo出现问题: 报错: Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#35 – "TCP connection reset by peer 解决方案: # 把docker-ce镜像源设置到阿里云 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2、如果重新运行startup.sh失败,可能是docker前面已经启过了还在运行。 解决方案: docker stop designer-allinone docker rm designer-allinone sh startup.sh 3、启动无代码失败 报错: 依赖包版本不匹配 pamirs-business-api已安装版本:[5.1.24],启动中包含的版本:[5.1.12] pamirs-data-audit-api已安装版本:[5.1.24],启动中包含的版本:[5.1.12] pamirs-sys-setting-core已安装版本:[5.1.24],启动中包含的版本:[5.1.12] ······ 解决方案:修改 startup.sh 中的版本修改docker pull 命令中的版本(注意:具体版本号查看https://doc.oinone.top/xin-ren-ru-men/18758.html中) 4、执行vi startup.sh出错,可能是没有修改这个文件的权限,执行chmod 777 startup.sh即可授权

    2024年11月8日
    65600

Leave a Reply

登录后才能评论