先说明一下:以下控件我用的都是Power Apps的现代化控件,而不是用Classic控件。
在 Power Apps 中,如何设置才能让文本框控件仅在光标移出该文本框,或者说该文本框失去焦点后才执行操作,例如搜索?我已经在文本输入控件的 TriggerOutput 属性选择了 “FocusOut”。根据 Microsoft 对于该属性的描述,TriggerOutput 有三个选项:
- **FocusOut :**仅当文本输入控件失去焦点时触发 OnChange。这是默认选项。
- **Delay:**在半秒延迟后触发 OnChange。
- **Keypress:**在用户键入时立即触发 OnChange。
根据我的理解,“FocusOut” 应该是我想要的。但是,即使在选择“FocusOut”之后,仍然会在我每输入一个字符的时候就开始执行操作(类似于“Keypress”行为),这会严重影响性能。
请考虑以下示例:有一个文本输入控件 (名为inputEmail) 和一个 label(名为resultName) 控件。在文本框中输入用户的电子邮件地址后,标签会显示用户的名称。我的设置如下:
resultName.text = Office365Users.UserProfileV2(inputEmail.Value).displayName
假设我在文本框要输入的邮箱为******@contoso.com。那么会出现以下情况:当我输入z,他就报以下错
Office365Users.UserProfileV2 fail: { "error": { "code": "ResourceNotFound", "message": "User not found", "innerError": xxxxxxxx} }
提示找不到该用户,然后我接着输入一个h,继续报上面错误。我每输入一个字母他就报一次错,直到我把整个邮箱地址输入完整,才不会报错。Label会出现正确的用户的名字。报错我可以理解,因为我根本还没输完邮箱地址,当然找不到,但问题是,他为什么会在我每输入一个字符的就是就跑去查找,而不是在我完整输入了邮箱地址,然后把光标移出文本框的时候才开始搜索?这个行为非常像TriggerOutput 属性选择了 “Keypress”,虽然我选的是FocusOut。
另外我也尝试这么设置过:
在inputEmail的OnChange属性设置
UpdateContext({resultName:Office365Users.UserProfileV2(inputEmail.Value).displayName})
然后在resultName.text中设置为resultName,结果同上。
再考虑另外一个例子:
有一个文本框用来输入UserID,然后有一个Table,用来显示该UserID下的订单。出现的同样情况是,在文本框中每输入一个字符,Table就跑去search一下数据库,然后显示没有结果。直到我完整输入完UserID,Table才显示结果,这会极度影响性能,因为我每敲一个字符就搜索一次。。。想咨询一下为何会这样?谢谢。