在“中写入SAPUI5控件渲染器”;sap.ui.define";风格
我想以新的在“中写入SAPUI5控件渲染器”;sap.ui.define";风格,sapui5,Sapui5,我想以新的sap.ui.define方式编写自定义控件。我在一个单独的文件中实现控件渲染器时遇到了一个问题:似乎必须将bExport=true,而这是一个单独的文件 BeExport:是否需要导出到全局名称-应仅由SAP拥有的代码使用 我还没有发现任何渲染器实现不使用export hack的例子,我怀疑这种方法是否存在 我有一些建议,但并不完全满足我: 忽略SAP要求并使用beexport=true。优点:SAP代码的最高重用率,通常遵循标准逻辑。缺点:避免官方建议 从工厂函数内显式设置my.
sap.ui.define
方式编写自定义控件。我在一个单独的文件中实现控件渲染器时遇到了一个问题:似乎必须将bExport=true
,而这是一个单独的文件
BeExport:是否需要导出到全局名称-应仅由SAP拥有的代码使用
我还没有发现任何渲染器实现不使用export hack的例子,我怀疑这种方法是否存在
我有一些建议,但并不完全满足我:
- 忽略SAP要求并使用
。优点:SAP代码的最高重用率,通常遵循标准逻辑。缺点:避免官方建议beexport=true
- 从工厂函数内显式设置
。优点:简单,不接触my.namespace.control.GreatControlRenderer
。缺点:破坏模块化设计(因为模块实际上设置了全局变量)beexport
从技术上讲,可供公共使用的对象引用是在框架代码内使用方法创建的,包括:
sap.ui.core.Control.extend()
——实际上在父类方法中
dot.separated.qualified.name
在全局范围内创建对象的层次结构,如下所示:
jQuery.sap.setObject = function(sName, vValue, oContext) {
var oObject = oContext || window,
aNames = (sName || "").split("."),
l = aNames.length,
i;
if (l > 0) {
for (i = 0; oObject && i < l - 1; i++) {
if (!oObject[aNames[i]]) {
oObject[aNames[i]] = {};
}
oObject = oObject[aNames[i]];
}
oObject[aNames[l - 1]] = vValue;
}
};
jQuery.sap.setObject=函数(sName、vValue、oContext){
var oObject=oContext | |窗口,
aNames=(sName | | |“).split(“.”),
l=aNames.length,
我
如果(l>0){
对于(i=0;oObject&&i
首先,渲染器是一个具有渲染功能的对象。这是一个静态函数。从模块返回此渲染器
sap.ui.define([],function(){
“严格使用”;
var MyControlRenderer={};
MyControlRenderer.apiVersion=2;
MyControlRenderer.render=函数(oRm、oControl){
//呈现你的控制
};
返回mycover;
});
然后在控件中,导入渲染器对象并将其指定给控件的Renderer属性,如下所示:
sap.ui.define([
“sap/ui/core/Control”,
“/MyControl渲染器”
],函数(控件,MyControl渲染器){
“严格使用”;
var MyControl=Control.extend(“bla.MyControl”{
元数据:{
// ...
},
渲染器:MyControl渲染器
});
返回MyControl;
});
在本例中,呈现程序与控件位于同一目录中。对于其他读者:UI5中存在一个错误,如果控件从抽象类(例如sap/ui/core/TooltipBaseRenderer.js不存在)扩展,则获取不存在的
*renderer.js
文件。现在通过提交解决了这一问题,从UI5 1.82.0开始应该可以使用+