2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【SAPUI5】Aggregation bindingで複数アイテムを表示

Posted at

##はじめに
ビューにデータを表示させるために、これまでは単体のデータをビューにひもづけていました。(参考:【SAPUI5】MVCを完成させよう
今回は、複数のデータを表形式で表示する方法を紹介します。
その前に、データバインディングの種類について整理しておきます。

##データバインディングの種類
データバインディングには、以下の3種類があります。

###Property binding
コントロールのプロパティにモデルのデータを直接設定することです。
WS000044.JPG

###Context binding(またはElement binding)
コントロールにモデルを丸ごとバインドすることです。これにより、そのコントロールおよびその子のコントロールは相対パスでモデルのデータを参照することができます。
WS000043.JPG

###List binding(またはAggregation binding)
複数行のデータを持つモデルで使用します。自動的に子のコントロールが作られ、子のコントロールは相対パスでモデルのデータを参照することができます。
WS000045.JPG

##Aggregation bindingを実装してみよう
###ゴール
複数レコードを持つモデルを作成し、Listコントロールを使用して表示します。
WS000046.JPG

###ステップ
前提: 入門編の記事まとめで作成したアプリを用意します

  1. 新しいモデルを定義
  2. manifest.jsonにモデルを追加
  3. ビューに新しいモデルのデータを表示させる

####1. 新しいモデルを定義
modelフォルダの配下に"Pricelist.json"というファイルを新規作成します。
WS000047.JPG

以下のコードを入力します。

{ 
	"products" :[
		{
			"name" : "Pumpkin",
			"price": 15.00,
			"currency": "EUR",
			"supplier": "CompanyA"
		},
		{
			"name" : "Apple",
			"price": 200.00,
			"currency": "JPY",
			"supplier": "CompanyB"
		},
		{
			"name" : "Banana",
			"price": 50.00,
			"currency": "EUR",
			"supplier": "CompanyC"
		},
		{
			"name" : "Tomato",
			"price": 1000.00,
			"currency": "EUR",
			"supplier": "CompanyA"
		},	
		{
			"name" : "Egg",
			"price": 600.00,
			"currency": "JPY",
			"supplier": "CompanyD"
		}
	]
}

####2. manifest.jsonにモデルを追加
modelsセクションの一番下に、Pricelist.jsonへのリンクを追加します。modelsセクションは全体で以下のようになります。

		"models": {
			"i18n": {
				"type": "sap.ui.model.resource.ResourceModel",
				"settings": {
					"bundleName": "test.helloworld.i18n.i18n"
				}
			},
			"mPrice":{
				"type": "sap.ui.model.json.JSONModel",
				"uri": "model/Price.json"
			},
			"mPricelist":{
				"type": "sap.ui.model.json.JSONModel",
				"uri": "model/Pricelist.json"
			}
		}

####3. ビューに新しいモデルのデータを表示させる
App.viewの中に新しく以下のPanelコントロールを追加します。(Panelとは、画面の要素を乗せるためのお皿のようなものです)

					<Panel headerText="Product List">
						<content>
							<List items="{mPricelist>/products}">
								<items>
									<ObjectListItem
										title="{mPricelist>name}"
										number="{mPricelist>price}"
										numberUnit="{mPricelist>currency}">
									</ObjectListItem>
								</items>
							</List>							
						</content>
					</Panel>

ListコントロールにmPricelistのモデルをバインドします。これがAggregation bindingです。次に、Listの子要素としてObjectListItemコントロールを配置します。
親のコントロール(List)では絶対パスでモデルを参照していますが、子のコントロール(ObjectListItem)では先頭にスラッシュがなく、相対パスとなっています。
ObjectListItemの属性として、title(テキスト)、number(数字)、numberUnit(数字に添える単位)を指定します。その他の属性については公式リファレンスを参照してください。

App.viewのコードは全体では以下のようになります。

<mvc:View 
	controllerName="test.helloworld.controller.App" 
	xmlns="sap.m" 
	xmlns:l="sap.ui.layout" 
	xmlns:mvc="sap.ui.core.mvc">
	<App>
		<pages>
			<Page title="Page1">
				<content>
					<Panel headerText="panel1">
						<content>
							<l:VerticalLayout class="sapUiContentPadding">
								<Button text="{i18n>helloButton}" press="onShowHello"/>
								<Text text="{mPrice>/product/name}"/>
								<Text binding="{mPrice>/product}" text="{mPrice>price}"/>
							</l:VerticalLayout>								
						</content>
					</Panel>
					<Panel headerText="Product List">
						<content>
							<List items="{mPricelist>/products}">
								<items>
									<ObjectListItem
										title="{mPricelist>name}"
										number="{mPricelist>price}"
										numberUnit="{mPricelist>currency}">
									</ObjectListItem>
								</items>
							</List>							
						</content>
					</Panel>					
				</content>
			</Page>
		</pages>
	</App>
</mvc:View>

###実行結果
実行結果は以下のようになります。
WS000046.JPG

##参考にしたページ
Binding Types
Get Started: Setup and Tutorials-Walkthrough-Step 20: Aggregation Binding

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?