去年接手一个社区"签到助手"App需求——20多个签到桌,每桌一个按钮记录签到。第一版老老实实给每个按钮写独立事件块,代码像蜘蛛网。直到我发现App Inventor 2里那个被低估的神器——AnyComponent(任意组件)块。
核心需求:20多个按钮各自记录签到,实时显示繁忙状态,管理员一键重置,后期还能增量扩展。传统方式每加一个按钮就要一组积木,20个就是20组几乎一样的代码。
AnyComponent块的核心:不把积木绑定到具体组件,用变量指定操作哪个组件。
我用一个全局列表 deskButtons 存所有按钮,用 for each 循环配合 AnyComponent 块一次搞定所有按钮的初始化、事件、更新。
涉及三种AnyComponent块:
for each item button in list deskButtons
设置 任意组件 button 的 背景颜色 为 绿色
设置 任意组件 button 的 已启用 为 真when 任意组件 Button.Click
参数:component, notAlreadyHandled
记录签到时间 + 弹出通知一个事件处理器覆盖20个按钮——这是收益最明显的部分。
for each item button in list deskButtons
设置 任意组件 button 的 背景颜色 为 绿色
设置 任意组件 button 的 文本 为 "空闲中"notAlreadyHandled 的正确理解——如果该组件的特定事件块已存在,它就返回 false。可以用它做兜底处理从20个桌台扩展到30个,代码量反而因为新增功能更精简了。按钮交互代码不超过15个积木块,比最初版本减少90%。维护也轻松——改样式改 for each 里的属性就行,新增桌台往列表加一个元素就好。
AnyComponent块让编程思维从"面向单个组件"升级到"面向组件类型"。如果你App里有超过3个同类型组件,值得试试用它重构。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。