Data Binding Tutorial - 03 Data Binding Mode & Types

ํ™์ข…ํ™”ยท2021๋…„ 10์›” 4์ผ
0

databinding

๋ชฉ๋ก ๋ณด๊ธฐ
3/16

๐ŸŒŸ databinding์„ ์‹ค์Šตํ•˜๊ธฐ์— ์•ž์„œ datbinding์˜ ๊ฐœ๋…์„ ์ƒ๊ธฐํ•˜๊ณ  binding modes์™€ binding types์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด์ž.

๐Ÿ“Œ ๊ฐœ์š”

Data Binding: ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์€ ์ปจํŠธ๋กค์„ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค!!!
์•ž์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ์ด ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” model๊ณผ binding instance๊ฐ€ ํ•„์š”ํ•˜๋‹ค. model instance๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜ค๊ธฐ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค. ๋˜ํ•œ ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด binding information์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ด๋ฒคํŠธ ๋“ฑ์„ ๊ฐ™์ด ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿ“Œ binding modes

binding mode๋Š” data source๊ฐ€ UI์— ๋ฐ”์ธ๋”ฉ๋˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ๋‹ค.
SAPUI5์—์„œ๋Š” ์„ธ ๊ฐ€์ง€ binding modes๊ฐ€ ์žˆ๋‹ค.

  • One way binding : ๋ฐ์ดํ„ฐ๋Š” model -> view ๋กœ ์ „์†ก๋œ๋‹ค. model data๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  binding๊ณผ view๊ฐ€์—…๋ฐ์ดํŠธ๋œ๋‹ค.
  • Two way binding : ๋ฐ์ดํ„ฐ๋Š” model -> view, view -> model๋กœ ์ „์†ก๋œ๋‹ค. model์—์„œ data ๋ณ€๊ฒฝ์€ view์˜ control์— ๋ฐ˜์˜๋˜๊ณ  view์—์„œ์˜ data ๋ณ€๊ฒฝ์€ model๋กœ ๋ฐ˜์˜๋œ๋‹ค.
  • One time binding : ๋ฐ์ดํ„ฐ๋Š” model -> view๋กœ ํ•œ ๋ฒˆ ํ๋ฅธ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ i18n texts์™€ ๊ฐ™์€ ์ •์ ์ธ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ’ก SAPUI5๋Š” Javascript ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋ฉฐ MVC์—์„œ Model, View ๋ฐ Controller๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” MVC ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ binding types


SAPUI5์—์„œ๋Š” ๋‹ค์Œ์˜ binding types๊ฐ€ ์žˆ๋‹ค.

  • Property binding : property binding์€ control์˜ ์†์„ฑ์„ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  model data์—์„œ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. control ์†์„ฑ์„ ์ผ์น˜ํ•˜๋Š” ์œ ํ˜•์˜ model ์†์„ฑ์—๋งŒ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜ formatter ๋˜๋Š” data types์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Forammtting, Parsing, and Validating Data๋ฅผ ์ฐธ์กฐ.
  • Context/Element binding : context binding(element binding)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”์ธ๋”ฉ ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ชจ๋ธ์˜ ํŠน์ • ๊ฐ์ฒด์— element๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปจํŠธ๋กค๊ณผ ๋ชจ๋“  ํ•˜์œ„ ๊ฐ์ฒด ๋‚ด์—์„œ ์ƒ๋Œ€์  ๋ฐ”์ธ๋”ฉ์„ ํ—ˆ์šฉํ•œ๋‹ค. ํŠนํžˆ ๋งˆ์Šคํ„ฐ ์„ธ๋ถ€ ์ •๋ณด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉํ•˜๋‹ค.
  • Aggregation/List binding : list binding(aggregation binding)์€ ๋ชจ๋ธ์— ๋”ฐ๋ผ ํ•˜์œ„ control์„ ์ž๋™์œผ๋กœ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. template control์„ ๋ณต์ œํ•˜๊ฑฐ๋‚˜ factory function์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋ธ์— ์ •์˜๋œ list, ์ฆ‰ JSON Model์˜ arrays ๋˜๋Š” OData ๋ชจ๋ธ์˜ collection์—๋งŒ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Expression binding : model data์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์ด๋‚˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค.

example

  • JSON Model
	const personalInfoJson = [{
				"Name": "jonghwahong",
				"Tel": "010-xxxx-xxxx",
				"Email": "zzzonghwa@gmail.com",
                			"address": {
					"street": "sangdo",
					"city": "Seoul",
					"country": "KR"
				}
			},{
				"Name": "gildonhong",
				"Tel": "010-xxxx-xxxx",
				"Email": "gildong@test.com",
                			"address": {
					"street": "jinsam",
					"city": "Sacheon",
					"country": "KR"
				}
			}];
		
			const oModel = new sap.ui.model.json.JSONModel();
			oModel.setData(personalInfoJson);
			this.getView().setModel(oModel);
			this.byId("testTable").setModel(oModel, "Items");
  • Property binding
	<Text text="{/0/Name}"/>
  • Context/Element binding : control์„ model์˜ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ context binding์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ control๊ณผ ์ž์‹ ๋‚ด์—์„œ ์ƒ๋Œ€์  ๋ฐ”์ธ๋”ฉ์„ ํ—ˆ์šฉํ•œ๋‹ค.
	<l:VerticalLayout id="vLayout" binding="{/0/address}" width="100%">
							<Text text="{street}"/>
							<Text text="{city}"/>
							<Text text="{country}"/>
						</l:VerticalLayout>
  • Aggregation/List binding : ํ•˜์œ„ control์€ model data๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
	<List id="testTable" headerText="human Details" items="{Items>/}">
							<ObjectListItem title="{Items>Name}"/> 
						</List>
  • Expressiong binding
	<Text text="{= ${/0/Name} === 'johnhwahong' ? 'true jonghwa' : 'false jonghwa'}"/>

๐Ÿ’ก One-way VS One-Time

์œ„์—์„œ ์ ํžŒ ๊ธ€๋งŒ ๋ด์„œ๋Š” One-way์™€ One-time์˜ ์ฐจ์ด์ ์„ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค. One-way์™€ Onew-time์€ ๋‹ค์Œ ๋งํฌ์— ์ƒ์„ธํžˆ ์ •๋ฆฌ ๋˜์–ด ์žˆ๋‹ค. ๊ผญ ์ฝ์–ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค!

๐Ÿ’ก Two-way binindg

  • Two-way binding์€ ํ˜„์žฌ property binding์— ๋Œ€ํ•ด์„œ๋งŒ ์ง€์›๋œ๋‹ค. list binding๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ binding types์˜ ๊ฒฝ์šฐ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ๋˜๋Š” ์‚ญ์ œ๋Š” ํŠน์ • model์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด : list binding์˜ ๊ฒฝ์šฐ OData V4 ๋ชจ๋ธ์€ ์ƒˆ ์—”ํ„ฐํ‹ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ sap.ui.model.odata.v4.ODataListBinding#create ๋ฉ”์„œ๋“œ์™€ ์—”ํ„ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ sap.ui.model.odata.v4.Context#delete ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • formatter function์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ”์ธ๋”ฉ์€ ์ž๋™์œผ๋กœ "One-way"๋กœ ์ „ํ™˜๋œ๋‹ค. ๋”ฐ๋ผ์„œ "Two-way" ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” formatter function์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ Data Types๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

profile
coding everywhere

0๊ฐœ์˜ ๋Œ“๊ธ€