按照 Jerry 这篇文章介绍的代码,运行之后,给类型为 sap.ui.model.type.Currency 的字段设置一个非 number 类型的值之后,触发该数据类型自带的数据校验机制,显示 Enter a number 的错误消息。

SAP UI5 应用开发教程之四十六 - 使用 Message Manager 实现开箱即用的验证(Validation)信息抛出

本文介绍 SAP UI5 ManagedObjectsetProperty 方法的执行原理。

首先明确,什么是 ManagedObject

托管属性表示 ManagedObject 的状态。 它们可以存储简单数据类型(如“字符串”或“整数”)的单个值。 它们具有名称(例如“size”)和获取当前值(getSize)或设置新值(setSize)的方法。 当通过调用 setter 修改属性时,ManagedObject 被标记为无效。 可以使用 #bindProperty 方法将托管属性绑定到 sap.ui.model.Model 中的属性。 对模型属性的更新将自动反映在托管属性中,并且 - 如果 TwoWay 数据绑定处于活动状态,则对托管属性的更改将反映在模型中。 可以通过调用#unbindProperty 删除现有绑定。

当 input 控件失去 focus 之后,触发 onsapfocusleave,这个方法调用 onChange

传入的输入参数,event 类型为 sapfocusleave

如果当前最新的值和之前的值 getLastValue() 不相等,则调用 this.setValue

Input.setValue 调用 InputBase.setValue:

setValue 最终调用 setProperty,属性名称为 value

正式进入 setProperty 方法,首先从 mProperties 里得到修改之前的值:

然后进行 validateProperty

validateProperty 内部,首先从 this.getMetadata().getManagedProperty(sPropertyName) 读取该 value 属性的 元数据

关于 SAP UI5 控件的元数据设计,请参考我这篇文章:

深入学习SAP UI5框架代码系列之四:SAP UI5控件的元数据实现。

获得 string 类型对象:

类型对象由一系列函数组成:

执行 normalize 操作:

将这个不合法的 value,设置到 this.mProperties[sPropertyName] 中。

进行双向绑定的逻辑处理:this.updateModelProperty

拿到绑定对象:

进入双向绑定的处理分支:

if (oBinding && oBinding.getBindingMode() == BindingMode.TwoWay) {oBindingInfo.skipPropertyUpdate++;SyncPromise.resolve(oValue).then(function(oValue) {return oBinding.setExternalValue(oValue);}).then(function() {oBindingInfo.skipPropertyUpdate--;return oBinding.getExternalValue();}).then(function(oExternalValue) {if (oValue != oExternalValue) {that.updateProperty(sName);}handleSuccess();}).catch(function(oException) {oBindingInfo.skipPropertyUpdate--;handleException(oException);}).unwrap();

SyncPromise.resolve(oValue).then(function(oValue) {return oBinding.setExternalValue(oValue);})

CompositeBinding.js 内部,核心逻辑是第 325 行的代码:

that.oType.parseValue(oValue, that.sInternalType, aCurrentValues);

调用 outputFormat 进行输入值的解析工作:

SAP UI5 setProperty 的执行逻辑单步调式和分析相关推荐

  1. 使用工具分析 SAP UI5 应用前端执行的性能问题

    这是 Jerry 2021 年的第 66 篇文章,也是汪子熙公众号总共第 343 篇原创文章. 国庆黄金周开始的前一天,9月30日,我所在的开发团队收到了一个关于 Angular 应用的服务器端渲染( ...

  2. SAP UI5 BarcodeScannerButton 的初始化逻辑 - feature 检测,Cordova API 检测等逻辑

    sap.ndc.BarcodeScannerButton:用于启动条码扫描过程的按钮控件(显示条码图标). 如果本机扫描功能不可用或未授予相机功能,则该按钮要么被隐藏,要么通过打开带有输入字段的对话框 ...

  3. SAP ui5 setModel 的核心逻辑

    Sent: Friday, March 20, 2015 3:28 PM 为什么UI controlcall了setModel,传入了正确的json 数据之后,控件在runtime时仍然没有显示任何东 ...

  4. SAP UI5 router的初始化逻辑

    Sent: Wednesday, March 4, 2015 12:07 PM Subject: RE: ­Fiori 我debug发现那个需要的router初始化的代码没有得到执行,就是最后一张图黄 ...

  5. SAP UI5 CreateBindingContext 方法的实现逻辑

    Created by Jerry Wang, last modified on Jul 29, 2015 创建bindingContext: 因为传入的oContext为空,所以oData肯定解析不出 ...

  6. SAP UI5 应用启动(bootstrap)过程单步调试

    Created by Wang, Jerry, last modified on Jan 15, 2015

  7. SAP UI5 初学者教程之二十一 - SAP UI5 的自定义格式器(Custom Formatter) 试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  8. SAP UI5 应用开发教程之二十一 - SAP UI5 的自定义格式器(Custom Formatter)

    前一个步骤,我们已经通过 SAP UI5 的表达式绑定功能,给发票列表增添了动态高亮某些字段的功能: 对应的绑定表达式的值如下: 可以看到这些绑定表达式是直接在 XML 视图里编写的.如果自定义的逻辑 ...

  9. 深入学习SAP UI5框架代码系列之五:SAP UI5控件的实例数据修改和读取逻辑

    这是Jerry 2021年的第6篇文章,也是汪子熙公众号总共第277篇原创文章. 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) SAP UI5 module懒加载机制 ...

最新文章

  1. tsne pca 自编码器 绘图(CC2)——一定记得做无量纲化处理使用standardscaler,数据聚类更明显...
  2. 15道谷歌面试题及答案
  3. Delphi中Chrome Chromium、Cef3学习笔记(二)
  4. 消息消费端的确认机制
  5. 小尼机器人_小尼被机器人嫌弃“唱歌难听,长相一般”?
  6. 【剑指offer】面试题57 - II:和为s的连续正数序列(Java)
  7. 市值突破3000亿,Fortinet发布2021Q2财报
  8. HDU 1160 FatMouse#39;s Speed DP题解
  9. 【转】linux shell 逻辑运算符、逻辑表达式详解
  10. PHP可变变量($$)
  11. layui 点击头像 上传头像
  12. 手机资料误删恢复有什么办法
  13. 机器人学导论——操作臂运动学
  14. 2022-2027年中国民办高校行业市场调研及未来发展趋势预测报告
  15. IDEA初学者 常用注解意思
  16. PMBOK(第六版) PMP笔记——《十三》第十三章(项目干系人管理)
  17. 八股总结(二)计算机网络与网络编程
  18. android壁纸制作,安卓动态壁纸制做壁纸的方法教程
  19. 测试治具、夹具、托盘
  20. 【17】C语言 | 函数递归题

热门文章

  1. 生成目录树CMD命令(bat文件)
  2. except的实践经验
  3. struts2的处理流程
  4. 网站架构演变和知识体系
  5. 第七章:Java_集合
  6. Spring 学习——Spring AOP——AOP配置篇Advice(有参数传递)
  7. centos 开机执行的命令
  8. 团队作业8——测试与发布(Beta阶段)
  9. SessionListener失败,退出
  10. 温故而知新,UI学习中的大部分控件及常用的基础都整理了一下,很长~~~~~~~~~很长!!!!!!!...