mvc试图 下拉框不重复_微软Canvas App实战踩坑指南——不完美的代码复用

对开发人员而言,代码复用是一种非常常规的动作。通常我们可以封装一些代码作为一个函数,然后通过参数反复调用以减少重复代码。而Excel使用者们也会编写一种叫做宏的东西来达到类似效果(实际上宏就是保存好的VBA函数)。

开始编写Canvas app表达式之后,大家会发现,这东西不能自定义函数啊!

这个坑不大不小,刚好把大家的热情之火浇灭。毕竟在控件之间复制粘贴是小事,挺容易的,但是回头来修改的时候,不知道自己(或者别人)复制过多少处就是个非常麻烦的大事了。一旦漏掉了一两处,恐怕功能上是要出大问题的。

那么微软有没有提供解决方案呢?

答案是:真没有!

不过我们还是可以通过原有功能进行变通处理,虽然不够完美,但是聊胜于无了。做法就在Select函数上。

Select function - Power Apps​docs.microsoft.com
2ba43928ebce1f549b0559c26a8e0dd7.png

这个函数的作用是选中控件,可以被用于触发按钮。

既然有这个,解决问题的方法,自然就顺理成章奔着按钮去了!我们可以编写一个(或者多个)按钮,对其编写OnSelect事件,将需要复用的代码片段都丢进去。然后在需要调用的地方执行

Select(按钮名)

就可以了。这样无论多少处调用,都执行的是这一处按钮编写的代码。

但是这样做并不完美,以下问题需要小心处理

1、不要写出死循环来了。

如,按钮1中编写了需要复用的代码,依赖于下拉框2,而下拉框的OnChange时候企图执行 Select(按钮1),这种死循环是不允许的。不过编辑器会为我们发现这种情况,我们只需要注意斟酌代码的复用性就好

2、Select的效果是异步的

这个坑比较大,而且效果隐蔽难以察觉。举例来说,我有两端需要复用的代码,分别编写在按钮1按钮2中。

Select(按钮1);
Select(按钮2);

当我试图执行以上代码的时候,两者并不是顺序执行的。也就是说按钮2中的代码已经执行完成,按钮1中的代码可能还在执行中。如果有变量同时被两者依赖,情况会变得极为诡异,因为故障可能呈现为偶发形态。

3、没有参数、没有返回值

一望可知,使用按钮代替函数执行,仅仅是一种变通,而不是真的函数。输入输出就别指望了。结合第二条,实际上能做的复用程度有限。

4、作用域不能跨Screen

即只能是局部“函数”效果,不可以做全局“函数”。毕竟是触发控件生效的,控件的作用域决定了它不可以全局复用。

5、不美观,不方便

多出来的按钮只是一种开发手段,不是真的去给用户使用的。所以我们会需要在发布前,将所有这种按钮给隐藏起来,否则会给用户造成迷惑甚至误操作。而我们开发的时候则需要将其显示出来。显然这是一个非常繁琐的操作。可以按我的个人经验来回避,就是做一个全局bool变量,绑定在这些按钮的Visiable属性上,这样可以一次性修改达到全局显示/隐藏的效果;

虽然有这么多缺点,不过这是仅有的代码复用的手段,属于实战开发中应知应会的技能。不掌握这个小技巧的话,轻则把自己淹没在复制粘贴的混沌代码里,重则对偶发的bug症状束手无策。看我写得这么干货满满,不打算点个赞吗!


更多学习心得、笔记资料传送门

TiDB源码学习笔记:

TiDB源码学习笔记:启动TiDB - 知乎 (zhihu.com)

TiDB源码学习笔记:SQL的一生 - 知乎 (zhihu.com)

PowerApps实战指南:

微软Canvas App实战踩坑指南——事件驱动 or 数据绑定 - 知乎 (zhihu.com)

微软Canvas App实战踩坑指南——undocumented feature - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值