什麼是 SAP UI5 的繫結路徑

注销發表於2022-02-15

SAP UI5 繫結路徑由許多名稱標記(name token)組成,這些標記由分隔符字元分隔。 在框架提供的所有模型中,分隔符 char 是斜線"/" 即 / 符號。

繫結路徑可以是絕對的,也可以是相對的:絕對繫結路徑以斜槓 "/" 開頭,相對繫結路徑以名稱標記開頭,並且相對於繫結的控制元件的上下文進行解析。 在聚合繫結的情況下,聚合的每個條目都存在上下文,也可以使用 setBindingContext 方法為控制元件顯式設定上下文。

當您使用多個模型時,請在繫結路徑中指定模型名稱以定址正確的模型。 這同樣適用於為此類模型設定繫結上下文。 繫結路徑必須以模型名稱開頭,後跟“>” (即大於號),如下面的示例所示,用於設定繫結上下文。

一些例子:

'/Products/0/ProductName'
'/Products(0)/ProductName'
'ProductName'

//with model name
'myModelName>/Products/0/ProductName'
'myModelName>/Products(0)/ProductName'
'myModelName>ProductName'

json 模型的例子

json 資料:

{
    company: {
        name: "Treefish Inc",
        info: {
            employees: 3,
        },
        contacts: [
            {
                name: "Barbara",
                phone: "873"
            },
            {
                name: "Gerry",
                phone: "734"
            },
            {
                name: "Susan",
                phone: "275"
            }
        ]
    }
}

絕對繫結的例子:

  • /company/name
  • /company/info/employees
  • /company/contacts

相對繫結的例子:

  • name
  • info/employees
  • contacts

OData 繫結的例子

如何建立 OData 模型?

一個 OData 模型例項只能覆蓋一個 OData 服務。 要訪問多個服務,您必須建立多個 OData 模型例項。 建立 ODataModel 例項時唯一的必需引數是服務 URL。 它可以作為第一個引數或在 mParameters 對映中傳遞給建構函式。

例子:

var oModel = new sap.ui.model.odata.v2.ODataModel("http://services.odata.org/Northwind/Northwind.svc/");
var oModel = new sap.ui.model.odata.v2.ODataModel({serviceUrl: "http://services.odata.org/Northwind/Northwind.svc"});

建立 ODataModel 例項時,會傳送一個請求以檢索服務後設資料:

http://services.odata.org/Nor...$metadata

服務後設資料按服務 URL 進行快取。使用同一服務的多個 OData 模型可以共享此後設資料。 只有第一個模型例項會觸發 $metadata 請求。可以透過在 Odata 模型例項上呼叫 getServiceMetadata() 方法來訪問服務後設資料的 JSON 表示。

給 OData 請求增添 url 引數的兩種辦法

(1) 直接新增到 url 末尾:

var oModel = new sap.ui.model.odata.v2.ODataModel("http://myserver/MyService.svc/?myParam=value&myParam2=value");

(2) 使用 OData 模型建構函式的引數 mparameters:

var oModel = new sap.ui.model.odata.v2.ODataModel({ 
    serviceUrl: "http://services.odata.org/Northwind/Northwind.svc",    
    serviceUrlParams: {
        myParam: "value1",
        myParam2: "value2"
    },
    metadataUrlParams: {
        myParam: "value1",
        myParam2: "value2"
    }
});

相關文章