2017-01-20 8 views
0

XMLビューでは、名前が 'foo'のページにバインドされたJSONモデルがあります。モデルのオブジェクトには、リストに表示する '名前'フィールドと子コレクション 'bar'(コードフィールドがあります)があります。これは、のようにモデル化されています子コレクションへの集約バインド

JSコード子供のバー「アレイのリスト項目の値が名「FOO」を介して解決されることを

var foo = { name:'My Name', bar:[{ code:'Code 1' }, { code:'Code 2' }] } 
var fooModel = new sap.ui.model.JSONModel(foo); 
page.setModel(fooModel, 'foo'); 
page.bindElement('foo>/'); 

XMLマークアップ

<Label text='{foo>name}'/> 
<List items='{foo>bar}'> 
    <StandardListItem title='{foo>code}'/> 
</List> 

注意してください。少なくともこれは私のために働くもので、私はリストでそれらを参照する他の方法は見つけていません。

しかし、問題はどのように私のリスト項目の最上位の 'foo'オブジェクトデータも取得できますか?リスト項目にも「名前」フィールドを表示したかったとしますか? つまり、子コレクションを別の名前で参照できる次のものと同等の処理を行う方法はありますか?これを達成するための方法はありますか?

<List items="{ path:'foo>bar', name='bar' }"> 
    <StandardListItem title='{bar>code}' info='{foo>name}' /> 
</List> 

答えて

0

nameプロパティをバインドするには、絶対パスを使用する必要があります。 Absoluteは、モデル内のプロパティへの完全なパスを意味します。反対のものは相対バインディングパスです。ここでは、モデル内のどこかにプロパティを使用し、プロパティがモデル内にあるランタイムにバインディングコンテキストを設定します。

page.bindElement("foo>/"); 

を今すぐ実行時には、このページ内にモデルfooに対するすべての相対的なバインディングにこの情報が適用されます:あなたが使用してこれを行います。したがって、foo>barと書くと、ランタイムは自動的に​​を検索します。ただし、barオブジェクトには、nameというプロパティがないため、項目集計内では機能しません。したがって、絶対バインディングパスを使用してプロパティをバインドする必要があります。

<List items="{foo>bar}"> 
    <StandardListItem title='{foo>code}' info='{foo>/name}' /> 
</List> 

documenationのJSONModelのバインド構文の説明があります。

+0

お返事ありがとうございます。私のために働いたのはinfo '{foo>/name}'なので、絶対パス技術が働いていました。 (最初の投稿を#bindElementの修正で編集しましたが、これはあなたの答えと私にとってうまくいかなかった小さな矛盾を説明しています) – dlgrasse

+0

これはうまくいきません。つまり、それぞれが 'bar'配列を持つ 'foo'オブジェクトの配列があるとします。 "items = '{foo> /}'"と "items" = "{foo> bar '}"の内部リストを上位のリストにバインドすると、親オブジェクトを参照することができません(そして私はあなたが与えた答えの様々な順列を試しました)。 これが不明な場合は、元の投稿を編集してこの2番目の例を追加します。 – dlgrasse

+0

page.bindElement( "foo> /")を使用していますか?モデル内のオブジェクトfooを指すには、 "foo>/foo"でなければなりません。 – matbtt

関連する問題