2016-08-19 6 views
0

単純なフォームでデータをバインドする際に問題が発生しています。私はモックサーバーを使用していますし、リスト/テーブルにデータをバインドに成功してきた私のmanifest.jsonをがどのように見えるSimpleFormのSAPUI5データバインディング

この

"mock": { 
    "dataSource": "mainService" 
} 
マイmockdata(UserDetailsS​​et.json)がこの

[{ 
    "ID_PassNum": "cu001", 
    "Title": "Mr", 
    "Name": "Don", 
    "Surname": "Ownery", 
    "ResType": "SA", 
    "Country": "South Africa" 
}] 
のように見えます

My SimpleFormフィールドは次のようになります

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

何が欠けていますか?モックでその1つのオブジェクトのみならば結合

答えて

1

ODataModelを使用しているようです。 ODataModelsでは、コレクション/集計に対するバインディングは、JSONModelの場合ほど簡単ではありません。 collection/index/property構文でプロパティにアクセス/バインドすることはできません。

方法ODataModelsストアのデータ

あなたのUserDetailSetあなたの中に格納されたデータは、多少のようになりたいとODataModelのように設定されたエンティティをロードした場合:ISなど

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

「00001」に対しとをエンティティキー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": "LocalServiceと/のmetadata.xml" 私のフォームフィールドの下のリストは実際に模擬サーバーに基づいてデータを表示しています。私は自分のビューコントローラの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/name – chiranjeevigk

+0

ありがとう。 既にそれを試していて、それは動作しませんでした。 ご協力ありがとうございます –