这个问题是this一个问题的延续。
我有一个字符串格式的SAPUI5控件列表,并提取我使用的所需控件:
var sDefaultControlConstructor = "new sap.m.Input()";
var sConstructor = "return " + sDefaultControlConstructor;
var oConstructor = new Function(sConstructor);
var oField = oConstructor();
我得到的oField
对象如下所示:
M.c ... s.f {bAllowTextSelection:true,mEventRegistry:Object,sId:" id", mProperties:d,mAggregations:Object ...}
问题是我无法使用sap.ui.getCore().byId()
函数获取创建的对象。
我查找了我创建的对象与创建的对象之间的差异"通常"
var oField = new sap.m.Input();
它看起来像这样:
显然,这两个对象是不同的。d {bAllowTextSelection:true,mEventRegistry:Object,sId:" id", mProperties:d,mAggregations:Object ...}
问题是如何使用new Function()
创建第二种格式的控件。
谢谢。
答案 0 :(得分:0)
好的,我找到了解决方案。 我正在声明控件错误 - 每个控件的id由用户在创建此控件时给出,而当用户没有给控件任何id时,它会自动给出。
所以,当我做的时候
var sDefaultControlConstructor = "new sap.m.Input()";
var sConstructor = "return " + sDefaultControlConstructor;
var oConstructor = new Function(sConstructor);
var oField = oConstructor();
我的控件oField
是使用自动生成和分配的ID创建的。
当我事后给这个控件发id -
oField.sId = "someID";
sap.ui.getCore().byId("someID");
无法看到此控件(我真的不知道为什么。它始终返回undefined
)。
要解决此问题,需要在控件创建期间分配控件的ID:
var oConstructor = new Function("a", "return new sap.m.Input(a)");
var oField = oConstructor({id:'someID'});
OR
var sId = 'someID';
var oConstructor = new Function("a", "return new sap.m.Input(a)");
var oField = oConstructor({id:sId});
HERE是两个上述声明(工作而非工作)的JSBIN示例。