2016-08-19 88 views
0

我遇到了試圖在簡單表單上綁定數據的問題。我使用的是模擬服務器,並已成功地將數據綁定到一個列表/表SimpleForm上的SAPUI5數據綁定

我的manifest.json看起來像這樣

"mock": { 
    "dataSource": "mainService" 
} 

我mockdata(UserDetailsS​​et.json)看起來像這樣

[{ 
    "ID_PassNum": "cu001", 
    "Title": "Mr", 
    "Name": "Don", 
    "Surname": "Ownery", 
    "ResType": "SA", 
    "Country": "South Africa" 
}] 

我的SimpleForm字段看起來像這樣

<Label text="Name" /> 
<Input value="{mock>/UserDetailsSet/0/Name}" /> 
<Label text="Surname" /> 
<Input value="{mock>/UserDetailsSet/0/Surname}"/> 

我在想什麼?

回答

1

你似乎在使用ODataModel。在ODataModels對集合/聚合的綁定並不像使用JSONModel那樣容易。您無法使用collection/index/property語法訪問/綁定屬性。

如何ODataModels存儲數據

如果加載實體設置喜歡你UserDetailSet存儲在您的數據ODataModel喜歡看起來有點像這樣:

{ 
    UserDetailSet('00001'): { ... }, 
    UserDetailSet('00002'): { ... }, 
    UserDetailSet('00003'): { ... }, 
    UserDetailSet('00004'): { ... } 
} 

而「00001」等字樣IS實體鍵。如果您在UserDetailSet上創建聚合綁定,則ODataListBinding將處理將上述數據轉換爲每個項目的上下文。

屬性綁定上ODataModel

你的綁定必須是這樣的:

<Label text="Name" /> 
<Input value="{mock>/UserDetailSet('00001')/Name}" /> 
<Label text="Surname" /> 
<Input value="{mock>/UserDetailSet('00001')/Surname}"/> 

動態屬性綁定上ODataModel

或 - 多一點動態 - 像這樣綁定(注意:綁定現在是相對的,不是領先的/):

<SimpleForm id="MyForm"> 
    <Label text="Name" /> 
    <Input value="{mock>Name}" /> 
    <Label text="Surname" /> 
    <Input value="{mock>Surname}"/> 
</SimpleForm> 

和動態的SimpleForm本身使用bindElement

this.getView().byId("MyForm").bindElement({ 
    path: "/UserDetailSet('"+ sUserID +"')", 
    model: "MyOdataModelID", 
    // use OData parameters here if needed 
    parameters: { 
    "expand": "UserAdress" 
    }, 
    // react on binding events here 
    events: { 
    change: function (oEv) { }, 
    dataRequested: function (oEv) { }, 
    dataReceived: function (oEv) {} 
    } 
}); 

BR 克里斯

+0

嗨 感謝您的幫助。仍然沒有工作,但感謝您的教育反應。 問候 –

+0

可以後多一點你的代碼 – cschuff

+0

的喜 再說什麼是在戰後初期,我有以下 清單 「數據源」:{ \t \t \t「mainService」:{ \t \t \t \t「 URI 「: 」/在這裏/去/你/的serviceUrl /「, \t \t \t \t 」類型「: 」OData的「, \t \t \t \t」 setti NGS「:{ \t \t \t \t \t 」註釋「:[], \t \t \t \t \t 」odataVersion「: 」2.0「, \t \t \t \t \t 」localUri「: 」本地服務/ metadata.xml中「 以及我的表單字段下方的一個List,它實際上是基於模擬服務器顯示數據。我沒有我的視圖控制器的init事件中的代碼。我想你這樣的代碼 this.getView()byId( 「MyForm的」)bindElement({ 路徑: 「/ UserDetailSet( '00001')」, 模式: 「模擬」})。 問候 –

0

結合應該像模擬

<Label text="Name" /> 
<Input value="{mock>Name}" /> 
<Label text="Surname" /> 
<Input value="{mock>Surname}"/> 

如果它只有一個對象。如果不工作,把控制器代碼放在你設置模型的地方

+0

嗨 感謝您的幫助。試過你的有約束力的建議,但它沒有奏效。 「你把控制器代碼放在你設置模型到視圖的地方」的意思是什麼。這是你的意思或如何做到這一點?: onInit:function {//查看控制器 this.getView.setModel('mock'); .... 謝謝 –

+0

好吧,然後模擬模型是有名單..然後改爲模擬>/0 /名稱 – chiranjeevigk

+0

謝謝。 已經嘗試過,它沒有工作。 感謝您的幫助 –