• 首页
  • 产品中心
    • 数式Oinone四大产品

      低代码开发平台无代码开发平台集成开发平台AI大模型开发
    • 数式Oinone体系能力

      用户与组织权限管理文件管理消息中心国际化业务审计
    • 数式Oinone核心产品特性

      低无一体面向软件公司场景无限制应用级扩容可分可合
  • 服务中心
    • 客户服务

      预约演示方案咨询私有部署找人定制
    • 开发者

      问答下载
    • Oinone学院

      社区学习

    《精讲面向软件公司的低代码平台——以Oinone为例》

  • 合作伙伴
    渠道申请伙伴名录专家库
  • 关于数式
0571-88757863

上下文(Context)


在 Oinone Kunlun 中,“上下文”(context)是一个重要概念:它为组件提供了渲染、配置、以及元数据等信息,以便系统的任何组件都能对于这些信息做出适当的行为。从某种意义上说,它就像一个传播到各处的信息包。这在某些场景中非常有用。例如让输入框可以在表单和详情中表现的有所区别,或在组件中激活 / 禁用某些功能。

Web 客户端中存在两种不同的上下文:运行时上下文(RuntimeContext)和某些组件配置上下文(context)。因此,我们在使用 “上下文” 一词时需要谨慎——根据具体场景,它可能指代不同的含义。

我们在这里提到的 “上下文” 特指 “运行时上下文”(RuntimeContext)。

一、运行时上下文(RuntimeContext)

运行时上下文是与视图一一对应的,它所表现的结构和视图在页面上递归时表现的结构完全相同。即树形结构。

在运行时上下文中,有两类运行时上下文,它们是通过不同的方式进行创建的:

  • metadataHandle:元数据运行时上下文唯一键,它可能通过 页面入口(ViewAction) 提供,也可能通过 字段(field) 或 动作(action) 提供。
  • rootHandle:视图运行时上下文唯一键,它仅可能通过 视图(view) 提供。

下面让我们来分别看一下表格和表单视图中可能的 RuntimeContext 结构:

表格视图 RuntimeContext 结构

表单视图 RuntimeContext 结构

ROOT 是所有运行时上下文的根节点,它包含了 Vue 框架实例 App 对象。

当我们从菜单进入页面时,菜单对应的 ViewAction 则创建一个名为 metadataHandle-1 的运行时上下文,从这里作为起点开始渲染视图。

当渲染到 视图(View) 时,将生成对应的 rootHandle,当渲染到 字段(Field) 或 动作(Action) 时,将生成对应的 metadataHandle。

由此将产生如上图所示的 树形结构 。

二、Reference List

(一)RuntimeContext<Framework>

1、属性定义

frameworkInstance

  • 描述:当前上下文关联的框架实例(如前端框架的根组件实例)。
  • 类型:Framework(泛型参数,具体类型由实现方定义)。

routers

  • 描述:当前上下文的路由路径数组,用于导航和路径匹配。
  • 类型:RouterPath[](RouterPath需根据业务定义,通常包含路径字符串和参数)。

viewAction

  • 描述:通过跳转动作创建的上下文携带的视图动作(如页面跳转、弹窗打开等)。
  • 类型:RuntimeViewAction(可选,视图动作相关接口需额外定义)。

field

  • 描述:通过字段创建的上下文携带的具体模型字段信息。
  • 类型:RuntimeModelField(可选,字段元数据接口)。

module

  • 描述:当前上下文所属的运行时模块(如业务模块、功能模块)。
  • 类型:RuntimeModule(模块元数据接口,包含模块编码、名称等)。

model

  • 描述:当前上下文关联的运行时模型(如数据模型、业务对象)。
  • 类型:RuntimeModel(模型元数据接口,包含字段、关系等定义)。

virtualModels

  • 描述:运行时虚拟模型集合(非持久化模型,用于临时数据处理)。
  • 类型:Record<string, VirtualModel>(可选,键为模型标识,值为虚拟模型实例)。

view

  • 描述:当前上下文关联的运行时视图(如页面、弹窗、卡片等)。
  • 类型:RuntimeView(视图元数据接口,包含布局、模板、交互定义)。

viewLayout

  • 描述:从运行时视图解析出的布局 DSL(Domain Specific Language),用于定义视图结构。
  • 类型:DslDefinition | undefined(可选,具体 DSL 结构由视图系统定义)。

viewDsl

  • 描述:从运行时视图解析出的模板 DSL,用于定义视图内容和逻辑。
  • 类型:DslDefinition | undefined(可选)。

viewTemplate

  • 描述:最终执行的视图模板 DSL,由布局和模板合并生成。
  • 类型:DslDefinition(必填,确保视图渲染时有完整的 DSL 定义)。

extendData

  • 描述:扩展数据存储,用于存放上下文相关的额外信息(如临时状态、计算结果)。
  • 类型:Record<string, unknown>(键值对形式,类型灵活)。

defaultValueCache

  • 描述:默认值缓存,存储字段或模型的默认值,避免重复计算。
  • 类型:Record<string, unknown>(可选,键为字段 / 模型标识,值为默认值)。

initialValueCache

  • 描述:初始值缓存,存储字段或模型的初始值(如表单初始化时的值)。
  • 类型:Record<string, unknown>(可选)。

2、方法定义

getModel

  • 方法签名:getModel(model: string, isBelong?: boolean): GetModelResult | undefined
  • 描述:根据模型编码获取模型及其所在上下文。
  • 参数:
    • model: string:目标模型的编码(唯一标识)。
    • isBelong?: boolean:是否仅查找当前上下文及子上下文的模型(默认值:false)。
  • 返回值:
    • GetModelResult:包含模型实例、运行时上下文和是否为其他上下文标志的对象。
    • undefined:若模型未找到。

getModelField

  • 方法签名:getModelField(data: string, isBelong?: boolean): GetModelFieldResult | undefined
  • 描述:根据字段名称获取模型字段及其所在上下文。
  • 参数:
    • data: string:目标字段的名称(在模型中的唯一标识)。
    • isBelong?: boolean:是否仅查找当前上下文及子上下文的字段(默认值:false)。
  • 返回值:
    • GetModelFieldResult:包含字段实例、运行时上下文和是否为其他上下文标志的对象。
    • undefined:若字段未找到。

createFieldRuntimeContext

  • 方法签名:createFieldRuntimeContext(field: RuntimeModelField): RuntimeContext
  • 描述:基于指定字段创建新的运行时上下文(通常用于字段级操作场景)。
  • 参数:
    • field: RuntimeModelField:需创建上下文的模型字段实例。
  • 返回值:
    • RuntimeContext:新创建的字段上下文,携带该字段信息。

deepResolve

  • 方法签名:deepResolve(): void
  • 描述:深度解析视图模板,递归创建所有必要的子运行时上下文(如嵌套字段、关联模型)。
  • 参数:无。
  • 返回值:void。

transfer

  • 方法签名:transfer(runtimeContext: RuntimeContext, clone?: boolean)
  • 描述:将当前上下文的参数传输到目标运行时上下文。
  • 参数:
    • runtimeContext: RuntimeContext:目标上下文实例。
    • clone?: boolean:是否克隆参数(默认值:true,避免引用共享问题)。
  • 返回值:void。

getRequestModelFields

  • 方法签名:getRequestModelFields(options?: GetRequestModelFieldsOptions): RequestModelField[]
  • 描述:获取用于请求的模型字段列表(替代已废弃的getRequestFields)。
  • 参数:
    • options?: GetRequestModelFieldsOptions:筛选条件,包括视图类型、模式、提交类型等。
  • 返回值:
    • RequestModelField[]:符合条件的字段数组,包含字段本身及关联字段。

generatorVariables

  • 方法签名:generatorVariables(variables?: QueryVariables): QueryVariables
  • 描述:生成请求所需的 Variables 参数。
  • 参数:
    • variables?: QueryVariables:额外传入的 Variables 参数(将与上下文默认值合并)。
  • 返回值:
    • QueryVariables:最终的 Variables 参数对象。

getDefaultValue

  • 方法签名:getDefaultValue(): Promise<Record<string, unknown>>
  • 描述:异步获取字段或模型的默认值(从 DSL 中获取)。
  • 参数:无。
  • 返回值:
    • Promise<Record<string, unknown>>:包含默认值的键值对对象。

3、涉及类型说明

GetModelResult

export type GetModelResult = {
  model: RuntimeModel;
  runtimeContext: RuntimeContext;
  isOther: boolean;
};

GetModelFieldResult

export type GetModelFieldResult = {
  modelField: RuntimeModelField;
  runtimeContext: RuntimeContext;
  isOther: boolean;
};

RequestModelField

export interface RequestModelField {
  field: RuntimeModelField;
  referencesFields?: RequestModelField[];
}

GetRequestModelFieldsOptions

export interface GetRequestModelFieldsOptions {
  viewType?: ViewType;
  viewMode?: ViewMode;
  submitType?: SubmitType;
  relationUpdateType?: RelationUpdateType;
  filter?: boolean | RequestModelFieldFilterFunction;
}

RequestModelFieldFilterFunction

export type RequestModelFieldFilterFunction = (
  field: RuntimeModelField,
  viewType: ViewType,
  viewMode: ViewMode,
  submitType: SubmitType,
  relationUpdateType: RelationUpdateType
) => boolean;

QueryVariables

export interface QueryVariables extends Record<string, unknown> {
  scene?: string;
  metadata?: Record<string, VirtualModel>;
}
编辑此页
最近更新:2026/1/15 04:02
上一页
环境(Environment)
下一页
组件(Widget)
默认页脚
Copyright © 2026 Mr.Hope