SAP UI5 Week 3 - Unit 5. Fragments와 코드재사용
페이지 정보
본문
Week 3 - Unit 5. Fragments와 코드재사용
목차
- Fragment추가하기
- Nested 뷰와 컨트롤러 생성하기
webapp/view/SupplierInfo.fragment.xml (NEW)
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:form="sap.ui.layout.form">
<Panel
class="sapUiResponsiveMargin"
width="auto"
headerText="{i18n>supplierTitle}"
expandable="{device>/system/phone}"
expanded="false">
<content>
<List id="supplierList">
<items>
<StandardListItem icon="sap-icon://building" title="{ToSupplier/CompanyName}"/>
<StandardListItem icon="sap-icon://email" title="{ToSupplier/EmailAddress}"/>
<StandardListItem icon="sap-icon://world" title="{ToSupplier/WebAddress}"/>
<StandardListItem icon="sap-icon://phone" title="{ToSupplier/PhoneNumber}"/>
<StandardListItem icon="sap-icon://map" title="{ToSupplier/Address/City}"/>
</items>
</List>
</content>
</Panel>
<Panel
class="sapUiResponsiveMargin sapUiHideOnPhone"
width="auto"
headerText="{i18n>mapTitle}">
<Image src="{
parts: [
'ToSupplier/Address/Street',
'ToSupplier/Address/PostalCode',
'ToSupplier/Address/City',
'ToSupplier/Address/Country'
],
formatter: '.formatter.formatMapUrl'
}" />
</Panel>
</core:FragmentDefinition>
해당 코드는 앱의 뷰 디렉터리에 있는 공급업체 정보로 fragment를 만들고 있으며, 재사용하고자 하는 Object 뷰에서 패널 두 개를 잘라냅니다. 이러한 패널을 fragment 정의에 캡슐화하고 여기에 해당 네임스페이스를 지정해야 합니다. 기존 View 파일에 더 이상 코드의 이 부분이 포함되지 않아야 합니다.
다음으로 코드를 가져온 객체 뷰에 fragment를 다시 추가할 것입니다. 이렇게 fragment로 바꿔주게 되면, 공급업체 정보는 응용프로그램의 다른 위치/뷰에서 쉽게 재사용될 수 있습니다.
webapp/view/Object.view.xml
<mvc:View
controllerName="opensap.manageproducts.controller.Object"
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns:semantic="sap.m.semantic">
[…]
<semantic:content>
<ObjectHeader
id="objectHeader"
title="{ProductID}"
responsive="true"
number="{
path: 'Price',
formatter: '.formatter.numberUnit'
}"
numberUnit="{CurrencyCode}">
<attributes>
<ObjectAttribute text="{Name}"/>
</attributes>
</ObjectHeader>
<Panel
class="sapUiResponsiveMargin"
width="auto"
headerText="{i18n>productTitle}"
expandable="{device>/system/phone}"
expanded="true">
<content>
<form:SimpleForm id="objectForm">
<form:content>
<Label text="{i18n>productCategoryLabel}"/>
<Text text="{Category}"/>
<Label text="{i18n>productNameLabel}"/>
<Text text="{Name}"/>
<Label text="{i18n>productWeightLabel}"/>
<Text text="{= ${WeightMeasure} + ' ' + ${WeightUnit}}"/>
</form:content>
</form:SimpleForm>
</content>
</Panel>
<Panel
class="sapUiResponsiveMargin"
width="auto"
headerText="{i18n>supplierTitle}"
expandable="{device>/system/phone}"
expanded="false">
<content>
<List id="supplierList">
<items>
<StandardListItem icon="sap-icon://building" title="{ToSupplier/CompanyName}"/>
<StandardListItem icon="sap-icon://email" title="{ToSupplier/EmailAddress}"/>
<StandardListItem class="sapUiVisibleOnlyOnDesktop" icon="sap-icon://world" title="{ToSupplier/WebAddress}"/>
<StandardListItem icon="sap-icon://phone" title="{ToSupplier/PhoneNumber}"/>
<StandardListItem icon="sap-icon://map" title="{ToSupplier/Address/City}"/>
</items>
</List>
</content>
</Panel>
<Panel
class="sapUiResponsiveMargin sapUiHideOnPhone"
width="auto"
headerText="{i18n>mapTitle}">
<Image src="{
parts: [
'ToSupplier/Address/Street',
'ToSupplier/Address/PostalCode',
'ToSupplier/Address/City',
'ToSupplier/Address/Country'
],
formatter: '.formatter.formatMapUrl'
}" />
</Panel>
<core:Fragment fragmentName="opensap.manageproducts.view.SupplierInfo" type="XML"/>
</semantic:content>
지금 응용 프로그램을 다시 실행하면 똑같이 표시됩니다. 공급업체 정보는 객체 뷰의 동일한 위치에 표시되어야 합니다. 이 보기의 DOM도 동일하게 유지되며 개발자 도구에서 확인할 수 있습니다.
2.Nested 뷰와 컨트롤러 생성하기
webapp/view/ProductDetails.view.xml (NEW)
<mvc:View
controllerName="opensap.manageproducts.controller.ProductDetails"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc"
xmlns:form="sap.ui.layout.form">
<Panel
class="sapUiResponsiveMargin"
width="auto"
headerText="{i18n>productTitle}"
expandable="{device>/system/phone}"
expanded="true">
<content>
<form:SimpleForm id="objectForm">
<form:content>
<Label id="categoryLabel" text="{i18n>productCategoryLabel}"/>
<Text id="category" text="{Category}"/>
<Label text="{i18n>productNameLabel}"/>
<Text text="{Name}"/>
<Label text="{i18n>productWeightLabel}"/>
<Text text="{= ${WeightMeasure} + ' ' + ${WeightUnit}}"/>
</form:content>
</form:SimpleForm>
</content>
</Panel>
</mvc:View>
이제 Object 뷰에서 코드를 추가로 추출하여 새 뷰를 만듭니다. 제품 데이터가 들어 있는 패널에서 전체 코드를 복사하여 보기 폴더의 새 파일에 붙여넣습니다.
이를 ProductDetails.view.xml이라고 합니다.
위 코드의 ID를 컨트롤러의 일부 코드에 필요한 첫 번째 라벨 및 텍스트에 추가하십시오. 더불어 뷰 정의를 추가하는 것과 뷰에 대해 올바른 컨트롤러 이름도 지정해야 합니다.
이제 객체 뷰에도 새 뷰를 포함시켜야 코드가 다음과 같이 표시됩니다.
webapp/view/Object.view.xml
<semantic:content>
<ObjectHeader
id="objectHeader"
title="{ProductID}"
responsive="true"
number="{
path: 'Price',
formatter: '.formatter.numberUnit'
}"
numberUnit="{CurrencyCode}">
<attributes>
<ObjectAttribute text="{Name}"/>
</attributes>
</ObjectHeader>
<Panel
class="sapUiResponsiveMargin"
width="auto"
headerText="{i18n>productTitle}"
expandable="{device>/system/phone}"
expanded="true">
<content>
<form:SimpleForm id="objectForm">
<form:content>
<Label text="{i18n>productCategoryLabel}"/>
<Text text="{Category}"/>
<Label text="{i18n>productNameLabel}"/>
<Text text="{Name}"/>
<Label text="{i18n>productWeightLabel}"/>
<Text text="{= ${WeightMeasure} + ' ' + ${WeightUnit}}"/>
</form:content>
</form:SimpleForm>
</content>
</Panel>
<mvc:XMLView viewName="opensap.manageproducts.view.ProductDetails"/>
<core:Fragment fragmentName="opensap.manageproducts.view.SupplierInfo" type="XML"/>
</semantic:content>
…
컨트롤러 폴더 내에서 새 컨트롤러를 정의합니다. 이를 ProductDetails.controller.js라고 합니다.
webapp/controller/ProductDetails.controller.js (NEW)
sap.ui.define([
"sap/ui/core/mvc/Controller",
"opensap/manageproducts/model/formatter"
], function(Controller, formatter) {
"use strict";
return Controller.extend("opensap.manageproducts.controller.ProductDetails", {
formatter: formatter,
onInit: function() {
this.byId("categoryLabel").setVisible(false);
this.byId("category").setVisible(false);
}
});
});
이 컨트롤러 내에서 우리는 단지 우리의 관점에 의해 실제로 사용되는지 보기 위해 임의로 변경을 한 것입니다. 이제 이 ID가 새 ID를 정의한 nested view에서 두 개의 컨트롤을 검색하여 visible=visible로 설정해야 합니다.
앱을 다시 실행하면 제품 범주에 대한 레이블과 텍스트 컨트롤이 숨겨지는 것을 볼 수 있습니다.
- 이전글SAP UI5 Week 3 - Unit 6. 대화상자 구현하기 21.09.24
- 다음글SAP UI 5 Week 3 - Unit 4. 사용자 기기에 맞춤 UI 제공하기 21.09.24