中继器进阶

发布于 / 教程 / 58 条评论

本文的重点在于如何从外部获取中继器里的数据。因为Axure提供了中继器内的数据交换接口,但是没有明显提供从外部获取中继器内部数据的方法。当你需要获取中继器里的内容的时候你无法直接通过函数获取到相应数据。
简单来说,如何实现这样的需求:假如有页面A和页面B,页面A中存储有中继器数据,如何才能在页面B中获取到页面A的中继器里的数据?

更新

文档已于2024.03.27 更新,便于理解阅读。

基础分析

外部调用只提供了如下几个函数:
repeater
[[repeater]]、[[visibleitemCount]]、[[itemCount]]、[[dataCount]]、[[pageCount]]、[[pageindex]]

[[repeater]]:提供一个基础的对象
[[visibleitemCount]]:函数获取中继器里可见的项目数
[[itemCount]]:计算
[[dataCount]]:似乎是数组运算
[[pageCount]]:页码
[[pageindex]]:page索引

中继器猜想

通过以上已有的函数,我们显然可以看到这几个函数都不能直接实现中继器数据调用的需求,但是[[Repeater]]对象函数给了我们提示,如果结合获取文本函数[[LVAR.text]]是否可以间接实现获取中继器数据的需求?
当我试图使用[[Repeater.text]]的时候,我获得了中继器里存储的所有数据,但似乎这些数据以列的方式展现,原以为是矩形框太窄的原因导致数据以列排列,但是我尝试拉宽文本框后数据仍然以列排列。
请看示例:
demo1

中继器实现

我创建了一个有3行3列表单的中继器,以1as2df3gh填充,并以此假定一个预设字符串:1as2df3gh,在使用[[Repeater.text]]函数后获取的数据看似和字符串’1as2df3gh’相同,这里我做了一个简单的判断:
点击查看

通过简单的判断我发现这两个值并不相同,通过观察发现中继器里的这串字符以列排列所以每行有一个换行符,是否可以去掉换行符得到预设字符串呢?通过函数[[LAVAR.replace(‘\n’,”)]]我把换行符替换为空,经过再次判断结果和预设值相同。
至此,可以从外部获取到已经向中继器里添加的数据,只是目前只是获取到一个字符串形式,通过对字符串的进一步处理,就可以获取到我们想要的数据内容。
注意:
Axure的中继器以数组形式存储数据,并且中继器里某些元件对象都将占据一个数组位置,在示例中我使用的是表格,所以数据以换行符“\n”分割。
如果中继器里有比如复选框、文本标签、按钮类等要取得精确的数据还需要通过[[LAVAR.replace(‘元件对象’,”)]]去除相应的元件对象位。比如有复选框
就用[[LAVAR.replace(‘复选框’,”)]]有按钮类就用[[LAVAR.replace(‘BUTTON’,”)]]即可去除这些元件对象获取原始数据。

实际案例

有如下场景【在此不考虑此场景实际的业务含义以及意义,所以在演示原型上与实际有出入】:

现有两名学员张三,李四,他俩要参加一场名为复训的训练,训练的时间、地点、训练的教员、检查员都未知,需要管理员在后台分配操作。

请看示例:
首先进入待训练学员页面,在表单中有张三,李四两名学员需要参加训练,初始状态这个表单只有学员名称、学员参加的训练名称,没有训练的详细信息,比如训练的日期、地点以及教员是谁。
点击操作栏的按钮进入到训练场次的管理页面,建立好场次再把学员、教员、教员分别加入到训练场次中,保存后完成给张三李四分配一场复训的训练。在分配好训练后我们回到待训练学员页面,这个时候两名学员的训练信息已经得到更新:

分析:

1.这是一个跨页面数据传递需求,在Axure中能实现跨页面数据交互的只有全局变量。
2.人员的添加表单可以增删改查,说明表单由动态生成,表单应该通过中继器实现。
3.保存的内容是查询的结果,查询只有单一属性(学员姓名),结果具有同一数据的多个属性(时间、地点、教员、检查员),所以无法直接传递查询的内容到另一页面。只有通过获取中继器的筛选结果再通过变量传递到另一页面。

用户流程:

1.在训练管理页面点击张三这一行的操作按钮,页面跳转到场次管理页面。
2.在场次管理依次点击“场次导入”,当场次列表展现的时候我们再点击操作列的“生成场次”。
3.弹窗中选择科目“复训”,确定后此时场次已经自动生成。
4.在“添加人员”弹窗中输入框依次查询出张三,李四并点击添加;同理点击“添加教员”“添加检查员” 后查询出相应人员,点击确定,列表中自动展现刚添加的学员以及教员,点击保存即完成人员分配操作。
5.点击左侧导航菜单“训练管理”,此时表单数据已经根据在场次管理页面的数据录入更新。

 

整个流程并不复杂,现在我们来看如何实现了刚才的整个人员添加以及参数的跨页传递。

案例实现:

1.主要中继器都放置在人员添加模态弹框中,请看示例:
repeater
2.这里我们使用了两个中继器,一个存放原始的人员列表ry_list0,除了名称和数字列外其他数据列都默认隐藏:
repeater
一个作为接收用户模糊查询选择的人员列表ry_list:
repeater
3.文本框模糊查询即在中继器ry_list0中筛选出有当前输入内容的中继器行:
repeater
4.设置ry_list0行的鼠标单击事件,在单击时候向中继器ry_list添加一行就把当前行的值传递到了ry_list:
repeater
5.在保存按钮单击事件我们把ry_list的值传递给全局变量:xy1,xy2,jy,jcy分别代表学员1,学员2,教员,检查员,这里就使用到了我们一开始就探讨的[[repeature.text]]函数的复合形式:
repeater
6.最后,在模拟机管理页面载入时接收全局变量的值到指定的表单位置即可:
repeater

思考

在此案例中,除了全局变量的运用,还有更重要的是如何获取中继器里的数据,大部分我们只是对中继器进行增,删,改有需求,并没有想过如何查询出来。

原型在线演示

点击观看

原型下载

中继器高级教程

转载原创文章请注明,转载自: LYLARES BLOG » 中继器进阶

  1. 请问原型在哪啊

    1. @小太阳 文末有下载链接。
  2. 不错👍👍

  3. 录屏存到腾讯微云了:https://share.weiyun.com/5gUYvuI

    1. @charles 你的视频没有文字描述: 1.是不是页面数据更新问题? 2.在【场次管理页面】你执行完整个流程时,所有数据都保存在了一个中继器中 2.实际上本文涉及到变量获取和变量跨页面传递,你标识的函数就是先获取你在【场次管理页面】添加的学员教员检查员等信息,然后通过全局变量在【训练管理页面】载入时赋值,就实现了信息的夸页面更新
      1.我检查了原型,和实际效果没有差异 2.流程:场次管理页面-操作-分配按钮-场次管理页面-场次导入按钮-确定-场次安排列表-操作-生成场次-下拉选择复训-确定-添加人员-添加学员-添加教员-添加检查员-确定 3.添加人员的顺序严格按照学员-教员-检查员添加 4.完成以上操作后场次管理页面更新 5.一定要点击左侧菜单的 训练管理 训练管理页面的人员训练信息才会更新,如果是在浏览器新开页面是不会更新的
      1. @lylares ---添加人员-添加学员-添加教员-添加检查员-确定,然后【场次管理页面】刷新,其中下载文件中的列【学员】【教员】【检查员】对应不上;而演示地址中能对应上。 对应不上是因为【下载文件】中我标识的函数那里【split('separator','limit')】limit位置写错了吧,应该分别是1、7、13、19;而不是1、8、15、22.
  4. 图片测试直接粘贴网络图片地址:

  5. 评论不能贴图啊。。

    1. @charles 直接粘贴图片地址即可...
  6. 下载文件的运行结果和演示地址演示效果有些出入,是大佬故意设置成这样的吗?还有大佬的表格是怎么用矩形和线段来拼成的?那么多元件看的眼都花了。。

    1. @charles 你讲的出入是指什么?是少了功能还是多了细节?表格就是用矩形线段拼的没用axure自带的表格,元件多就无能为力了...o(╯□╰)o
  7. 希望大神的原型能让我追上大神的步伐

    1. @洛芋 已发至你的邮箱。
  8. 希望大神的原型可以给迷途的我指引

    1. @欧阳 已发你