2017-07-24 78 views
0

我希望你能幫助我。在幾次閱讀所有文檔後,搜索幾天等等,我沒有辦法做到我要用一種乾淨的方式來解釋,並且認爲我錯過了一些東西,因爲這是一個非常基本的場景。SAPUI5:如何創建控件層次結構?

我正在使用oData模型,在這種情況下是兩個命名模型「Model1」,「Model2」。現在我想要的是基於oData路徑顯示「父」組合框,並根據選擇來改變其項目的表,換句話說。

Model1 { //JSON representation of the data. 
Accounts:[ 
    "account 1": {invoices: ["invoice1", "invoice2", "invoice3"]}, 
    "account 2": {invoices:["invoice4", "invoice5"]} 
] 
} 

組合框:

<... items={Model1>/Accounts} /> -- This works and shows Account 1, and Account2. 

<Table... items="{Model1>Invoices}"> 
.. 
<items> 
.... 
</items> 
</Table> 

我要的是改變它的上下文對組合框選擇的賬戶表。問題是,這是有效的,但它第一次加載視圖,因爲沒有選擇帳戶,它會調用錯誤的odata路徑MYSERVICE/Invoices,而不會執行任何操作,因爲Account尚未設置,發票一旦選擇了賬戶,就應該是MYSERVICE /賬戶('Account1')/發票。

我知道我可以用代碼實現這一點,但我確定必須有一個乾淨的方法來做到這一點。

說真的,這讓我瘋狂。

感謝您的幫助。

+0

對不起,我編輯了這個問題,因爲「代碼」沒有被轉義。 – Desproposito

回答

1

你肯定

items="{Model1>Invoices}" 

觸發的OData打電話?因爲這是一個相對路徑(不帶前導斜槓),通常它不應該進行調用。

你可以做什麼:

  1. 手柄組合框selectionChange事件;
  2. 在此事件處理程序中,創建一個您將綁定表的路徑。在你的情況下,路徑可能如下所示:「/ Account(Account1)」 - 「/ {EntitySetName}({KEY})」。你可以利用createKey方法ODataModel2;
  3. 設置使用路徑表的情況下:

    ​​

  4. 一旦上下文設置,相對結合將自動開始工作,並表將得到「發票」

我假設帳戶和發票通過導航屬性和一對多基數鏈接,這就是爲什麼$ expand參數將加載相應的發票。

+0

感謝您的回答。雖然是一個相對路徑,但是它將盛大的父上下文用作當前路徑。我沒有解釋,假設帳戶有一個父母是用戶,並且用戶上下文是Set,那麼綁定解析爲User(1)/不存在的發票:( 您的方法與我的類似,但更清潔,但它仍然需要'硬編碼'的關係 – Desproposito

+0

恐怕不可能在XML視圖中聲明所有這些東西,不幸的是你必須從JS設置綁定,但你可以嘗試使用一個黑客,你可以設置相同的模型,但對於GrandParent,Parent和Child(如果需要)使用不同的名稱。在這種情況下,表不會有根上下文,所以相對路徑不會被解析。 –

+0

我也試過那個!它有效,但我認爲它不是太理想,然後,如果唯一的方法是編碼,我會這樣做,非常感謝! – Desproposito