跳转到内容

数据回传(LoadAction 实现)

数据回传(GoBackWithContext 实现)

当前页面数据需要从下一个页面获取。

常见场景如:

  1. 当前列表页面获取下一个列表页面的数据。

custom-container

实现方式

实现方式 1

trantor 提供了 GoBackWithContext 来为容器加载数据,步骤如下:

  1. 数据容器 A 中新增一个 Action, targetView 指向视图 B,openViewType 可以是 Dialog/Drawer/Columns 其中一种类型, 通常使用的是弹窗类型(Dialog)。

  2. 当 Action 被触发时,会以弹框形式打开视图 B,并在视图 B 的某个容器中指定一个 Action,指定属性 action=“GoBackWithContext”

  3. 当上一个步骤中的 Action 被触发时,会将当前的上下文数据带回到到数据容器 A,将结果作为数据来源回填至数据容器 A 中。若第一个步骤中的 Action 配置了 processFlow/processFunc,则回填数据会发送到后端指定的 flow/func 进行处理,再将处理后的返回结果回填至数据容器 A 中。

注意:数据容器 A 中的数据会根据 id 自动去重。

实现方式 2

  1. 在视图 A 使用 Controller 中打开视图 B,使用可 this.openView 方法,指定 openViewType 以及 payloadCallback 参数。

  2. 在试图 B 的某个容器中指定一个 Action,指定属性 action=“GoBackWithContext”

  3. 当上个步骤中的 Action 被触发时,会带着当前的上下文作为入参,调用步骤 1 中传入的 payloadCallback 方法

实现示例

考虑这个业务场景,通过选择物料来创建采购单,为每个采购单行填写采购数量并一次性提交。这个场景里涉及到从[物料]到[采购单行]的模型转换,且来源[物料]需要用户选择。同时转换出的[采购单行]是非持久化数据,需要使用 TableForm 和[采购单]一起提交。

<View version="2" title="创建采购单">
<TableForm model="OrderLine">
<Fields>
<Field name="name" />
<Field name="price" />
</Fields>
<Actions>
<Action label="选择添加数据" targetView="viewB" openViewType="Dialog" processFlow="transformMaterialToOrderLineFlow" />
</Actions>
</TableForm>
</View>
<View version="2" title="选择物料">
<Table model="Material">
<Fields>
<Field name="name" />
<Field name="code" />
</Fields>
<Actions>
<!-- 带回选中的数据 -->
<Action label="确定" multi="true" action="GoBackWithContext" />
</Actions>
</Table>
</View>

注意:当前例子为0.17.x 版本