2017-06-05 40 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