2017-06-05 151 views

回答

1

有获得元素的完整列表中没有当前的记录,方法。这些元素在核心实例中的mElements私有映射(对象)中注册。你可以在Core source code里面检查这个对象的用法。它不会通过一种方法直接暴露于外界。

通常情况下,你可以简单地绕过'私人'的访问级别,这只是一个约定在JavaScript中,只是做sap.ui.getCore().mElements,但在这种情况下这不起作用。这是因为核心被封装成Interface(通过封闭),该封闭只保存公共方法的代理。这意味着您无法从sap.ui.getCore()调用中获取真实的核心实例,因此您无法从那里访问mElements属性。我不知道任何获得'原始'核心实例的方法(通常它不应该是可能的 - SAP的人打算在这里做防御性编程,不允许用户干涉核心内部)。如果你设法通过某种方式获得它,那么你可以访问这个'private'属性并获得元素列表(实际上是ID和引用之间的映射)。

0

这里没有公共的API。

如果您的页面具有根视图,您可以通过为每个控件聚合应用getter并遍历所有内容(如此等等)来创建遍历视图树的recuresive函数。

您可以使用控件的getMetadata()方法获取公共聚合名称。

请注意,通过这种方式,您只能访问公共聚合上的控件,而不能访问内部控件。

2

有没有办法在控制注册表中获取实例的完整列表?

有点作弊,是的!

getAllRegisteredElements:() => { 
    let core; 
    const fakePlugin = { 
    startPlugin: realCore => core = realCore 
    }; 
    sap.ui.getCore().registerPlugin(fakePlugin); 
    sap.ui.getCore().unregisterPlugin(fakePlugin); 
    return core.mElements; 
}, 

该API registerPlugin等待包含方法startPlugin(和stopPlugin)作为参数的对象。它只要核心被初始化就立即它invokes the startPlugin method。作为一个参数,我们可以通过mElements(感谢hint from Serban)获得所有已注册元素的地图。

UI5 - get registered elements