UI5_Walkthrough_2

Pages and Panels

将前面app的xml内容放到Panel中,并将Panel放到Page中,设置displayBlock="true"可以更适应全屏工作的高度。

   <App>
      <pages>
         <Page title="{i18n>homePageTitle}">
            <content>
               <Panel
                  headerText="{i18n>helloPanelTitle}">
                  <content>
                     <Button
                        text="{i18n>showHelloButtonText}"
                        press="onShowHello"/>
                     <Input
                        value="{/recipient/name}"
                        description="Hello {/recipient/name}"
                        valueLiveUpdate="true"
                        width="60%"/>
                  </content>
               </Panel>
            </content>
         </Page>
      </pages>
   </App>

Page与Panel的界面如下


Shell Control

使用Shell Control作为应用的root容器,Shell在界面上引用了letterbox,可以使得应用能更好视频屏幕视觉。
在index文件中将原来新建ComponentContainer的代码改成如下,放到Shell中, Shell control可以作为应用的根元素

            new sap.m.Shell({
               app : new sap.ui.core.ComponentContainer({
                  name : "sap.ui.demo.wt",
                  height : "100%"
               })
            }).placeAt("content");

Shell Control如下,全屏后,APP内容放在中间部分


Margins and Paddings

将Panel设置class="sapUiResponsiveMargin" width="auto",可以看到内容与边框之间有一定的边缘Margin,并且是响应式的,随着屏幕大小的改变,Margin的大小也自动在变。在Button及Text元素中,可以设置class="sapUiSmallMarginEnd"或者class="sapUiSmallMargin来设置元素间的边缘Margin。

Custom CSS

定义css文件/css/style.css,其中1rem为16px。

.myAppDemoWT .myCustomButton.sapMBtn {
  margin-right: 1rem
}
.myAppDemoWT .myCustomText {
  font-weight: bold;
}

在manifest.json中引入css文件资源
在view中,app标签上<App class="myAppDemoWT">Button标签class="myCustomButton"这样可以定位到自定义的样式,在Text标签上class ="sapUiSmallMargin sapThemeHighlight-asColor myCustomText"加入自定义myCustomText样式

Nested Views

新建xml view,将原来app view的Panel中的内容移到新的HelloPanel View,并新建与之对应的controller。原来的App view中,content标签中通过<mvc:XMLView viewName="sap.ui.demo.wt.view.HelloPanel"/>引用Nested View。
由于Nested View,原来上面的custom css文件中css选择器选择不到相应的类,需要修改

Dialogs and Fragments

Fragments是轻量级的UI部件,没有独立的controller,可以在多个view中共用。定义一个button,在上面定义press="onOpenDialog"事件,在controller中定义onOpenDialog事件的实现,通过sap.ui.xmlfragment创建fragment,其中id为HelloPanel view的ID,将dialog添加为view的adependent,生命周期将于view一样。

      onOpenDialog : function () {
         var oView = this.getView();
         var oDialog = oView.byId("helloDialog");
         // create dialog lazily
         if (!oDialog) {
            // create dialog via fragment factory
            oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.wt.view.HelloDialog");
            oView.addDependent(oDialog);
         }
        oDialog.open();
      }

新建HelloDialog.fragment.xml

<core:FragmentDefinition
   xmlns="sap.m"
   xmlns:core="sap.ui.core" >
   <Dialog
      id="helloDialog"
      title="Hello {/recipient/name}">
   </Dialog>
</core:FragmentDefinition>

Fragment Callbacks

Fragments没有独立controller来处理事件,sap.ui.xmlfragment的第三个参数传入处理事件的controller,
可以直接oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.wt.view.HelloDialog", this)this为当前HelloPanel Controller。定义onCloseDialog事件的实现this.getView().byId("helloDialog").close();

Icons

图标通过sap-icon://<iconname>.来访问。在button上可以icon="sap-icon://world",在dialog fragment中,在content标签内可以添加Icon Control

<core:Icon
  src="sap-icon://hello-world"
  size="8rem"
  class="sapUiMediumMargin"/>

Reuse Dialogs

前面我们将Dialog Fragment的交互代码写在HelloPanel Controller中,我们要复用这个Dialog Fragment时,需要将代码写在Component.js这个公共模块下。首先定义模块HelloDialog.js,继承SAPUI5 Base Object,构造方法传入view,open事件中,由于没有controller传入,我们定义local的oFragmentController对象,里面包含了onCloseDialog事件,新建oDialog时,将oFragmentController对象作为第三个参数传入,

sap.ui.define([
    "sap/ui/base/Object"
], function (UI5Object) {
    "use strict";
    return UI5Object.extend("sap.ui.demo.wt.controller.HelloDialog", {
        constructor : function (oView) {
            this._oView = oView;    
        },
        open : function () {
            var oView = this._oView;
            var oDialog = oView.byId("helloDialog");
            if (!oDialog) {
                var oFragmentController = {
                    onCloseDialog : function () {
                        oDialog.close();
                    }
                };
                // create dialog via fragment factory
                oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.wt.view.HelloDialog", oFragmentController);
                // connect dialog to the root view of this component (models, lifecycle)
                oView.addDependent(oDialog);
            }
            oDialog.open();
        }
    });
});

fragment的生命周期随着view的销毁而销毁,我们要将复用的fragment绑定到rootView
在Component.js中,添加HelloDialog依赖,this.getAggregation("rootControl")获取manifest.json中定义的rootView,将其作为HelloDialog模块的参数传入,this._helloDialog = new HelloDialog(this.getAggregation("rootControl"));添加openHelloDialog事件的实现this._helloDialog.open();调用helloDialog模块的open事件。
修改onOpenDialog的实现方法this.getOwnerComponent().openHelloDialog();,getOwnerComponent获取当前view的component,即component.js,然后出发open事件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,413评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,396评论 2 45
  • 薛昂夫《楚天遥过清江引》原诗、注释、翻译、赏析 【原文】:【双调】楚天遥过清江引(元)薛昂夫【楚天遥】有意送春归,...
    xcy无名阅读 277评论 0 0
  • 20到30也就10年,10年不管是怎么过的,现在也改不了。而人生这黄金10我要每年都在我生命中留下深深的烙印!奋斗...
    幽冥船长阅读 342评论 0 0
  • 大早上5点多起来,去到另一个村里。中午1点多才回来,天气太热了!想喝好多好多水!! 回来重新再淘宝买蜂蜜瓶子,一直...
    大叶er阅读 95评论 0 1