使用新的Function()和字符串

时间:2015-08-30 10:46:41

标签: javascript sapui5

这个问题是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()创建第二种格式的控件。

谢谢。

1 个答案:

答案 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示例。