zoukankan      html  css  js  c++  java
  • UI5-文档-4.16-Dialogs and Fragments

    在这一步中,我们将进一步研究另一个可以用来组装视图的元素:the fragment。

    片段是轻量级UI部件(UI子树),可以重用,但是没有任何控制器。这意味着,每当你想定义一个特定UI的一部分是跨多个视图重用,或者当你想交换部分视图对彼此在某些情况下(不同的用户角色,编辑模式vs只读模式),一个片段是一个很好的候选人,特别是在不需要额外的控制器逻辑。

    一个片段可以由1到n个控件组成。在运行时,放在视图中的片段的行为类似于“普通"normal视图内容,这意味着片段中的控件在呈现时将被包含到视图的DOM中。当然,有些控件并不是设计为成为视图的一部分,例如对话框。

    但即使对于这些控件,片段也可能特别有用,稍后您将看到这一点。

    我们现在将添加一个对话框到我们的应用程序。对话框是特殊的,因为它们打开在常规应用程序内容之上,因此不属于特定的视图。这意味着对话框必须在控制器代码的某个地方实例化,但是,由于我们希望坚持声明性方法,并创建尽可能灵活的可重用工件,而且不能将对话框指定为视图,因此我们将创建包含对话框的XML片段。毕竟,对话框可以在应用程序的多个视图中使用。

    Preview

     

    A dialog opens when the new “Say Hello With Dialog” button is clicked

    Coding

    You can view and download all files at Walkthrough - Step 16.

    webapp/view/HelloPanel.view.xml

    <mvc:View
    
       controllerName="sap.ui.demo.walkthrough.controller.HelloPanel"
    
       xmlns="sap.m"
    
       xmlns:mvc="sap.ui.core.mvc">
    
       <Panel
    
          headerText="{i18n>helloPanelTitle}"
    
          class="sapUiResponsiveMargin"
    
          width="auto" >
    
          <content>
    
          <Button
    
             id="helloDialogButton"
    
             text="{i18n>openDialogButtonText}"
    
             press="onOpenDialog"
    
             class="sapUiSmallMarginEnd"/>
    
     
    
          <Button
    
             text="{i18n>showHelloButtonText}"
    
             press="onShowHello"
    
             class="myCustomButton"/>
    
          <Input
    
             value="{/recipient/name}"
    
             valueLiveUpdate="true"
    
             width="60%"/>
    
          <FormattedText
    
             htmlText="Hello {/recipient/name}"
    
             class="sapUiSmallMargin sapThemeHighlight-asColor myCustomText"/>
    
          </content>
    
       </Panel>
    
    </mvc:View>

     我们向视图添加一个新按钮来打开对话框。它只调用面板内容视图控制器中的事件处理函数。我们将需要新的id="helloDialogButton"在Step 29: Integration Test with OPA.

    webapp/view/HelloDialog.fragment.xml (New)

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

     我们添加一个新的XML文件,以声明方式在片段中定义对话框。片段资产位于核心名称空间中,因此我们在片段定义标记FragmentDefinition中为其添加了一个xml名称空间。

    语法类似于视图,但由于片段没有控制器,因此缺少此属性。此外,片段在应用程序的DOM树中没有任何占用空间,而且片段本身没有控件实例(只有包含的控件)。它只是一组重用控件的容器。

    我们还为对话框添加了一个id,以便能够从HelloPanel控制器访问对话框。

    webapp/controller/HelloPanel.controller.js

    sap.ui.define([
    
       "sap/ui/core/mvc/Controller",
    
       "sap/m/MessageToast"
    
    ], function (Controller, MessageToast) {
    
       "use strict";
    
       return Controller.extend("sap.ui.demo.walkthrough.controller.HelloPanel", {
    
          onShowHello : function () {
    
             …
    
          },
    
          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.walkthrough.view.HelloDialog");
    
                oView.addDependent(oDialog);
    
             }
    
             oDialog.open();
    
          }
     
       });
    
    });

      ▪ HelloPanel视图的ID如果片段中的对话框还不存在,则通过调用sa .ui实例化片段。xmlfragment方法,参数如下:

      这个参数用于在片段中的id前面加上前缀。在这里,我们为对话框控件定义了ID helloDialog,我们可以通过调用oView.byId(“helloDialog”)通过视图访问对话框。这确保了即使您以相同的方式在其他视图中实例化相同的片段,每个对话框也将拥有其惟一的ID,该ID将从视图ID和对话框ID连接起来。使用惟一id非常重要,因为重复的id会导致框架中的错误。

      ▪片段定义的路径

       我们将对话框添加为“依赖于”要连接到视图模型的生命周期的视图。一个方便的副作用是,当视图被销毁时,对话框将自动被销毁。否则,我们将不得不手动销毁对话框以释放其资源。

    webapp/i18n/i18n.properties

    # App Descriptor
    
    appTitle=Hello World
    
    appDescription=A simple walkthrough app that explains the most important concepts of SAPUI5
    
     
    
    # Hello Panel
    
    showHelloButtonText=Say Hello
    
    helloMsg=Hello {0}
    
    homePageTitle=Walkthrough
    
    helloPanelTitle=Hello World
    
    openDialogButtonText=Say Hello With Dialog
    
    dialogCloseButtonText=Ok

     文本包由两个用于打开按钮和对话框关闭按钮的新文本扩展。

    Conventions

      ▪始终使用addDependent方法将对话框连接到视图的生命周期管理和数据绑定,即使它没有添加到它的UI树中。

      ▪私有函数和变量应该总是以下划线开始。

    Parent topic: Walkthrough

    Previous: Step 15: Nested Views

    Next: Step 17: Fragment Callbacks

    Related Information

    Reusing UI Parts: Fragments

    Dialogs and other Popups as Fragments

    API Reference:sap.ui.core.Fragment

  • 相关阅读:
    元音字母
    最近使用LINQ遇到的故障
    ASP.NET 2.0下实现匿名用户向注册用户的迁移(下)
    ASP.NET MVC 2配置使用CKEditor编辑器
    ASP.NET 角色及成员管理(entry 'AspNetSqlMembershipProvider' has already been added错误的解决)
    为什么Firefox 3及之后的版本不能加载本地的JavaScript文件了?
    在ASP.NET MVC中使用DropDownList
    LINQ entityset 不包含GetEnumerator的定义,在MVC中使用entity framework(EF)出现“必须添加对程序集“System.Data.Entity”解决方法
    去除element.style样式
    判断ViewData[""]是否为空
  • 原文地址:https://www.cnblogs.com/ricoo/p/10102687.html
Copyright © 2011-2022 走看看