对于ignition来说,弹窗应该是一个常见的需求,然而官网给出的传参方法过于单调且弹窗后无法做更多的事,这里给出我解决弹窗传递参数以及在弹窗上进行判断等操作的一种解决方案(当时也是为了解决这个问题看了很多官网教程,最终请教了老师傅才算是解决了最后一点卡住的地方),要理解弹窗传参,首先要理解嵌入式view视图的传参,个人理解虽然应用的ignition功能模块不相同,但是思路是相似的。
view视图的传参
此处说的view视图更多是看作模版view视图,即作为需要批量生成的嵌入式视图,批量生成的view视图可以参考我的上一篇博客,此处以一个简单的复用组件举例。如下图所示:
PARAMS参数在整体界面处设置,即点击画布的其他部分,上图所示是已经设置完参数的样子,没有添加参数时应该是空白的,点击Add View Parameter即可添加value,同时右边箭头需要设置成双向的,因为我们除了会通过模版视图的文本框来添加数据,同样会有利用params参数往文本框写数据的需求,只允许input/output可以自行测试实验效果。
设置好整体参数后点击需要绑定数据的文本框,在PROPS里面会出现text选项,点击text左侧进行绑定操作,效果如下图所示:
点击锁链状图标后会出现如下图所示界面,选择Property,然后在右侧的Browse Properties中选择params中想要的参数:
完成参数选择后点击apply完成数据的绑定,此时尝试在文本框内输入数据时,PARAMS处的参数成功显示为对应数据,后续如果需要对该嵌入式视图进行数据修改,那么直接修改对应的PARAMS参数即可, 效果如下图所示:
弹窗的生成以及传参方法
ignition存在官方自带的弹窗方法,但是只能传递一个固定的参数,且无法编写程序进行其他多余的操作,十分的不够方便,虽然官网给出了调用程序的示例,但是没有直接的讲解怎么传参(我也是询问过后才知道怎么做),下面给出弹窗方法的讲解及利用程序进行弹窗:
如图是官方示例的弹窗操作,只能简单的展示数据和绑定数据,在Parameters中可以绑定想要的参数,但是显然的太简单了,单单展示一个数据在面对稍微复杂的需求时可能根本不够用,具体操作就不详细展示了,可以去官网查阅并实践。
我们要进行弹窗需要做的事肯定不止展示一个数据这么简单,可能还涉及到数据的修改和判断等等,弹窗中修改数据的话涉及到绑定操作,我根据网上学习的方法和官网教程以及请教他人最终自己实现了一个三重绑定的方法,该方法会在后续博客介绍。现在我们继续聚焦于弹窗的传参,这仍然靠官网提供的代码如下图所示:
system.perspective.openPopup("messageBox",'Popups/MessageBox', params = {'message':self.getSibling("TextField").props.text})
给出的代码是截图中未完全展现的部分,openPopup函数的第一个参数是popup脚本中的identifier,第二个参数是弹窗视图的路径,第三个参数是设置对应视图的params,即被弹出的视图的参数,或者说需要传递过去的参数,下面给出我当时根据要求做的代码,并且我会对思路进行讲解,再完全测试一次新的例子有点浪费时间,代码以及被弹窗视图如下所示:
具体需求是什么就不详细解说了,程序在此处的作用就是判断主页面上复选框选中的数量,在复选框选中数量为一个的情况下弹出窗口,其他情况都不弹窗,弹窗代码就是仿照官网给的代码加上自己的参数即可,然后下面给出界面被弹出后,怎么传递数据到原界面,下面给出的是确认按钮的代码,即点击确认后将被弹出界面上的数据传递到tag上:
代码的三个value用于获取嵌套视图的参数,或者理解为三个文本框的数据,此处我做了简单复用所以是获取参数,获取嵌套视图的参数以及当前视图的参数可以在右侧找到,如下图所示:
root代表当前视图可选择的相关参数,params代表可以传递出去的参数值,view应该是代表这整个视图能提供的所有参数设置,root可能是这个视图里面可以提供的各种参数,即view是代表点击画布空白时能提供的各种参数?目前个人如此理解。在代码中的为write函数写入tag组装的各种字符串变量的路径是tag的路径,可以在tag选项中直接copy path获得,因为我们是udt批量创建的,显然的path是有规律的,通过改变规律变化的变量即可直接修改对应tag的值。那么其实到这里已经完成了,因为我们的tag是和view视图绑定好的,修改tag即等于修改了需要展示的view视图的值,tag批量绑定view视图可以参考我的上一篇博客。考虑到仍然有些地方遗忘了以及可能有些操作仍然没有讲的很清楚,后面会考虑将当初自己制作的视频给出来。