首页 > 其他分享 >SAP UI5 框架 Manifest.js 里 getObject 函数的实现解析

SAP UI5 框架 Manifest.js 里 getObject 函数的实现解析

时间:2023-08-14 13:57:08浏览次数:40  
标签:oObject sPath 函数 对象 路径 js getObject UI5 属性

我们在 SAP UI5 manifest.json 文件里定义的配置信息,通过下图 Manifest.js 文件里的 getObject 函数返回给消费者。

这是一个名为 getObject 的 JavaScript 函数,主要用于通过给定的路径访问对象的子成员。下面是这段代码的中文注释:

/**
 * 通过给定路径访问一个对象的子成员的实用函数
 *
 * @param {object} oObject 对象
 * @param {string} sPath 以斜线 (/) 开始的路径
 * @return {any} 指定路径的成员的值;
 *         如果路径没有以斜线开始,它将返回对象给定路径的值
 */
function getObject(oObject, sPath) {
		// 如果传入的 sPath 是一个路径,我们在
		// manifest 对象中进行嵌套查找,返回具体的值,例如 "/sap.ui5/extends"
		if (oObject && sPath && typeof sPath === "string" && sPath[0] === "/") {
			// 通过去除开头的"/"并用"/"来分割剩下的字符串,获取一个路径数组
			var aPaths = sPath.substring(1).split("/"),
			    sPathSegment;
			// 遍历路径数组
			for (var i = 0, l = aPaths.length; i < l; i++) {
				// 获取当前路径段
				sPathSegment = aPaths[i];

				// 防止访问原生属性
				// 如果当前对象有路径段作为属性,则访问该属性,否则返回 undefined
				oObject = oObject.hasOwnProperty(sPathSegment) ? oObject[sPathSegment] : undefined;

				// 如果值不是对象,则停止查找。
				// 不允许访问其他类型的属性!
				if (oObject === null || typeof oObject !== "object") {

					// 如果这不是路径中的最后一个段,并且对象不为 undefined,则清除值。
					// 否则,例如 "/foo/bar/baz" 会在 "/foo/bar" 不是对象的情况下返回 "/foo/bar" 的值。
					if (i + 1 < l && oObject !== undefined) {
						oObject = undefined;
					}

					break;
				}
			}
			// 返回查找到的对象
			return oObject;
		}

		// 如果没有指定以斜线开始的路径,我们直接从 manifest 访问并
		// 返回值
		return oObject && oObject[sPath];
}

这段代码的主要作用是通过给定的路径(字符串形式)从一个对象中获取其子成员的值。路径可以是以斜线("/")开始,也可以直接是对象的属性名。如果是以斜线开始的路径,该函数会递归地在对象中查找对应的属性值;如果直接是属性名,函数会直接返回该属性的值。在寻找路径时,代码还进行了一些错误处理,防止访问到非对象类型的属性,以及防止访问对象的原生属性。

这个函数在处理复杂的嵌套对象时非常有用,尤其是在处理如 JSON 或 XML 这样的数据结构时,可以方便地通过路径获取到深层次的数据。

消费这个函数时,我们需要通过输入参数 sPath 传递一个路径参数去,函数返回这个路径代表的对象值。

标签:oObject,sPath,函数,对象,路径,js,getObject,UI5,属性
From: https://www.cnblogs.com/sap-jerry/p/17628433.html

相关文章

  • SAP UI5 manifest.json 里定义的 sap.ui.viewExtensions 区域的解析代码位置
    笔者这篇教程介绍了如何在SAPFioriElements应用的manifest.json里注册Extensionfragment,从而给ListReport应用的Table区域新增自定义列:10.如何通过扩展(Extension)的方式给SAPFioriElementsListReport的表格新增列上图extends区域注册的Extension信......
  • SAP UI5 manifest.json 文件里 extends 区域的内容是如何被解析的
    笔者这篇教程介绍了如何在SAPFioriElements应用的manifest.json里注册Extensionfragment,从而给ListReport应用的Table区域新增自定义列:10.如何通过扩展(Extension)的方式给SAPFioriElementsListReport的表格新增列我浏览器打开了SAPFioriElements应......
  • 在MQTT通信中用AT指令发送json格式的内容
    在MQTT通信中使用AT指令发送JSON格式的内容,需要使用适用于你的设备的AT指令集,并按照以下步骤进行操作:建立MQTT连接:首先,使用AT指令建立与MQTT代理服务器的连接。这可能涉及到设置服务器地址、端口、用户名、密码等参数。创建JSON数据:在你的设备中,使用AT指令创建要发送的JSON格式的......
  • js实现下载shp文件
    AP!浏览器是不会默认支持shp的相关文件的下载,仅有里面的.shp.xml是支持的,其他的如varshpArr=[".cpg",".dbf",".prj",".sbn",".sbx",".shp",".shp.xml",".shx",];因而需要确保服务器上的配置允许浏览器支持.shp文件的下载 MIME类型......
  • 使用canvas(2d)+js实现一个简单的傅里叶级数绘制方波图
    先看效果查看页面右下角,嘿嘿简要说明创建具有不同半径与角速度的圆集合;(截图中展现的效果为5个,代码是30个,运行后效果会不同)constgetCircles=(N=10)=>{constret=[];for(leti=0;i<N;i+=1){ret.push({r:100/(i*2+1),ω:i*2+1,......
  • js数组去重
    letarr=[1,2,2,2,3,4,5,5];letarr1=[]//方法1indexOf去重arr.map(e=>{if(arr1.indexOf(e)==-1){arr1.push(e)}})console.log(arr1)//方法2es6set去重letarr2=Array.from(newSet(arr))console.log(arr2)//方法3将数组的值保存为对象的key形式(o......
  • JSON WEB TOKEN - 简单的token认证方式 - 告别session和cookie - Java Demo
    JWT简介jwt非常适合前后分离和分布式的应用不必在服务端存储session,本地也不用存储cookie直接存两段信息即可localStorage["jwt"]=jwt;//tokenlocalStorage["name"]=json.name;//token中加密的某个字段,用于后期请求带上校验token是否被改可以把认证......
  • leaflet.js气象风场图制作
    Demo示例<!--https://github.com/onaci/leaflet-velocity--><!DOCTYPEhtml><html><head><title>LeafletVelocityDemo</title><metacharset="utf-8"/></head><body><div......
  • JSON生成Form表单的方法示例
    JSON生成Form表单的方法示例 更新时间:2018年11月21日14:21:14 作者:熟悉的陌生人  JSON表单是一个基于React的抽象组件,它可以把JSON数据格式描述的表单转换成项目中的表单,这篇文章主要介绍了JSON生成Form表单的方法示例,感兴趣的小伙伴们可以参考一下 JSON表单描述......
  • fastjson配置统一的日期格式转换
    importcom.alibaba.fastjson.serializer.SerializeConfig;importcom.alibaba.fastjson.serializer.SerializerFeature;importcom.alibaba.fastjson.serializer.ToStringSerializer;importcom.alibaba.fastjson.support.config.FastJsonConfig;importcom.alibaba.fast......