Sapui5 使用json字符串的属性动态创建UI5控件。json字符串中的事件问题

Sapui5 使用json字符串的属性动态创建UI5控件。json字符串中的事件问题,sapui5,Sapui5,在我的实际开发中,我创建了一个应用程序,它需要在运行时从数据库自定义表动态创建UI5控件 作为创建输入字段时的简化示例: var loProObj = JSON.parse(pData.TEMPLATE); var loInp = new sap.m.Input(loProObj); 到目前为止,当pData.TEMPLATE是JSON字符串时,这适用于大多数属性。 但是它对事件方法属性不起作用 因此,作为上面代码的简化JSON字符串,使用以下字符串: '{"value":"{boundVa

在我的实际开发中,我创建了一个应用程序,它需要在运行时从数据库自定义表动态创建UI5控件

作为创建输入字段时的简化示例:

var loProObj = JSON.parse(pData.TEMPLATE);
var loInp = new sap.m.Input(loProObj);

到目前为止,当pData.TEMPLATE是JSON字符串时,这适用于大多数属性。 但是它对事件方法属性不起作用

因此,作为上面代码的简化JSON字符串,使用以下字符串:

'{"value":"{boundVariable}","change":"onChange"}'
当解析这个字符串时(记住它是一个从要解析为JSON的数据库提交的字符串,而不是JSON对象),onChange仍然是一个字符串。这可能就是问题所在。但是我可以做些什么来传输json字符串中有关eventhandler方法的信息呢

任何提示都很好

问候
MatHay
loProObj.change=this[loProObj.change]

这将字符串
“onChange”
(或任何其他事件名称)转换为实际函数(如果在
上下文中可用)。然后可以在触发事件时调用此函数

如果您需要在事件处理程序中访问此,我建议:


loProObj.change=this[loProObj.change].bind(this)

正如中所建议的,有一些公共API,可以通过这些API从字符串值创建控件

给定:XML格式的UI定义
给定:JSON格式的视图定义 与
XMLView相同。创建
,但改用:

sap.ui.getCore().attachInit(()=>sap.ui.require([
“sap/ui/core/mvc/JSONView”,
],JSONView=>JSONView.create({
定义:`{
“类型”:“sap.ui.core.mvc.JSONView”,
“内容”:[
{
“类型”:“sap.m.Input”,
“宽度”:“12rem”,
“占位符”:“编辑我”,
“更改”:“警报(‘已触发示例全局处理程序’)”
}
]
}`,
})。然后(view=>view.placeAt(“内容”))


嗨,马克,不幸的是,这并没有真正的帮助。因此,编码必须“知道”所有事件属性,从json对象获取它,并且必须调用setter或您的代码片段。但其思想是完全创建对象,而无需构造函数中json对象的额外“逻辑”。通常,在构造函数中的对象中将函数作为函数对象。我想有一种方法可以在我的json字符串中将函数对象定义为字符串。。?!看起来这个案例没有标准的方法。但是,如果JSON文本定义了一个完整的视图,或者定义是XML格式的,则有一些解决方案。然后,您可以使用标准API来创建字符串以外的控件。那是你的选择吗?嗨。是的,这可能是一个选择。你知道如何做到这一点吗?请看下面我的答案: