我們在單步調試 SAP UI5 OData 模型或者 JSON 模型初始化代碼時,都會發現 sap.ui.model.Model
構造函數調用了其基類 MessageProcessor
的構造函數,如下圖所示:
MessageProcessor 是 SAP UI5 統一存儲和管理各種類型的 Message 的實現類之一。
以下是在 SAP UI5 裏手動創建消息或擴展框架提供的消息傳遞功能的一些方法:
可以通過中央 sap.ui.core.message.MessageManager API 手動創建自定義消息。 對於這些手動創建的消息,應用程序必須確保適當的消息生命週期。
對於自定義目標格式,可以使用自定義消息處理器。 自己的消息處理器要繼承類sap.ui.core.message.MessageProcessor。
如果使用的後端以特殊方式提供消息,可以使用自己的sap.ui.core.message.MessageParser 實現。
Message Model
通過調用 getMessageModel() 方法從消息管理器中檢索消息模型。可以直接在應用程序中使用它,也可以將它用作參考實現。
可以像使用任何其他模型一樣使用消息模型將聚合綁定到根路徑(/
),例如列表中的項目,並添加過濾器和排序器。 /
集合中的每個項目都代表一個 sap.ui.core.message.Message 對象,因此可以綁定到爲此類對象指定的所有屬性。 MessagePopover 控件用於向用戶顯示消息。
示例代碼如下:
// "Button" required from "sap/m/Button"
// "MessagePopover" required from "sap/m/MessagePopover"
// "MessagePopoverItem" required from "sap/m/MessagePopoverItem"
var oMessagePopoverButton = new Button({
text: "Show MessagePopover",
type: "Accept",
press: function() {
oMP.openBy(this);
}
});
var oMP = new MessagePopover({
items: {
path:"message>/",
template: new MessagePopoverItem({ description: "{message>description}", type: "{message>type}", title: "{message>message}"})
}
});
oMP.setModel(sap.ui.getCore().getMessageManager().getMessageModel(),"message");
oMessagePopoverButton.placeAt("content");
OData V2 Messages
OData V2 消息要麼由 sap.ui.model.odata.ODataMessageParser 自動創建並由 sap.ui.model.odata.v2.ODataModel 處理,要麼可以由應用程序手動創建。
這些消息的目標可以爲空。 在這種情況下,消息沒有特定目標並且與整個應用程序相關。如果設置了目標,則它必須對應於綁定路徑,然後使用該路徑將消息傳播到相應的綁定。如果這些綁定屬於實現 refreshDataState 函數的控件,則該控件能夠對數據狀態更改做出反應。