SAPUI5FileUploader实现依赖:sap.ui.define(['sap/ui/core/Control','./library','sap/ui/core/LabelEnablement','sap/ui/core/InvisibleText','sap/ui/core/library','sap/ui/Device','./FileUploaderRenderer','sap/ui/dom/containsOrEquals','sap/ui/events/KeyCodes','sap/base/Log','sap/base/security/encodeXML',"sap/ui/thirdparty/jquery",//jQuery插件"addAriaDescribedBy"'sap/ui/dom/jquery/Aria'],function(Control,library,LabelEnablement,InvisibleText,coreLibrary,Device,FileUploaderRenderer,containsOrEquals,KeyCodes,Log,encodeXML,jQuery){可以看到也是用了jQuerySAPUI5框架自动生成一个input元素和一个包含browse....的按钮,并实现下面两个接口:sap.ui.core.IFormContentsap.ui.unified.IProcessableBlobssendXHRsendXHR默认值为false,此时useformsubmit提交上传的数据。如果是,则使用XHR请求提交。FormSubmit提交的数据经过Jerry测试,在Chrome开发者工具网无法观察到上传文件的内容。XMLTemplateProcessor.js检测到XML视图中定义了FileUploader控件,实例化,调用init方法:创建TextField:用于选择本地文件:this.oFilePath=library.FileUploaderHelper.createTextField(this.getId()+"-fu_input").addEventDelegate({onAfterRendering:function(){if(that.getWidth()){that._resizeDomElements();}}});这个TextField的类型是sap.m.Text:然后创建上传按钮:this.oBrowse=library.FileUploaderHelper.createButton(this.getId()+"-fu_button");然后设置当前要创建的FileUploader实例,即this指向的控件实例,作为TextField和Button实例的parent:this.oFilePath.setParent(this);this.oBrowse.setParent(this);这里演示如何用代码检测是否使用了sap.m库,只要检查按钮控件的元数据,即getMetadata方法返回的结果是否为sap.m.Button即可。//检查是否使用了sap.m库this.bMobileLib=this.oBrowse.getMetadata().getName()=="sap.m.Button";SAPUI5的applySettings方法会依次应用XML视图Settings中的指定控件,一一设置:上图中的属性就是我在XML视图中定义的属性,如下图:我们经常可以观察到此方法在SAPUI5源代码中调用:sap.ui.getCore()。getStaticAreaRef():这是SAPUI5应用程序最终呈现的HTML本机代码中的一个元素。id是:sap-ui-static,由常量STATIC_UIAREA_ID表示。这个静态区域用来隐藏Popups、Shadow、Blocklayer等元素。这个静态区域的初始化采用了Lazyloading的懒加载方式:只有在真正需要的时候才会进行初始化操作。varoStaticArea=document.getElementById(STATIC_UIAREA_ID),oConfig,oFirstFocusElement;如果(!oStaticArea){oStaticArea=document.createElement("div");oFirstFocusElement=document.createElement("span");oConfig=this.get;if(!this.bDomReady){thrownewError("DOM还没有准备好。无法创建静态UIArea。");}
