当前位置: 首页 > article >正文

SAPUI5基础知识25 - 聚合绑定(Aggregation Binding)

1. 背景

Aggregation Binding 是 SAPUI5 中的一种数据绑定方式,用于将数据模型中的集合(如数组)绑定到 UI 控件的聚合(如列表项、表格行等)

常见的场景包括将一个数组绑定到 sap.m.Listitems 聚合,或者将一个数组绑定到 sap.ui.table.Tablerows 聚合。

2. 练习

2.1 创建本地的JSON文件

在前序练习的基础上,让我们在webapp文件夹下,建立一个新的Invoices.json文件,用于存储数组数据。

改动后的项目文件结构如下:
在这里插入图片描述

JSON文件的内容如下:

{
    "Invoices": [
        {
            "ProductName": "Pineapple",
            "Quantity": 21,
            "ExtendedPrice": 87.2,
            "ShipperName": "Fun Inc.",
            "ShippedDate": "2015-04-01T00:00:00",
            "Status": "A"
        },
        {
            "ProductName": "Milk",
            "Quantity": 4,
            "ExtendedPrice": 10,
            "ShipperName": "ACME",
            "ShippedDate": "2015-02-18T00:00:00",
            "Status": "B"
        },
        {
            "ProductName": "Canned Beans",
            "Quantity": 3,
            "ExtendedPrice": 6.85,
            "ShipperName": "ACME",
            "ShippedDate": "2015-03-02T00:00:00",
            "Status": "B"
        },
        {
            "ProductName": "Salad",
            "Quantity": 2,
            "ExtendedPrice": 8.8,
            "ShipperName": "ACME",
            "ShippedDate": "2015-04-12T00:00:00",
            "Status": "C"
        },
        {
            "ProductName": "Bread",
            "Quantity": 1,
            "ExtendedPrice": 2.71,
            "ShipperName": "Fun Inc.",
            "ShippedDate": "2015-01-27T00:00:00",
            "Status": "A"
        }
    ]
}

Invoices.json文件中包含了5张json格式的发票,我们将使用此JSON文件中的数据数据,绑定控件sap.m.List

JSON是一种非常轻量级的存储数据的格式,可以直接用作SAPUI5应用程序的数据源。

2.2 创建JSON模型

接下来,让我们在manifest.json中的sap.ui5部分添加此发票模型。

在这里插入图片描述

因为我们想要一个 JSONModel,所以我们将type设置为 sap.ui.model.json.JSONModel
uri是相对于组件的数据路径 (相对路径)。

通过这些配置,SAPUI5组件会自动从Invoices.json文件中加载发票数据,并实例出化一个名字为invoiceJSONModel

实例化的 JSONModel会被绑定在组件上,因而这个模型在应用程序中是全局可见的。

改动后的manifest.json文件内容如下:

{
    "_version": "1.58.0",
    "sap.app": {
        "id": "zsapui5.test",
        "i18n": "i18n/i18n.properties",
        "title": "{{appTitle}}",
        "description": "{{appDescription}}",
        "type": "application",
        "applicationVersion": {
            "version": "1.0.0"
        }
    },
    "sap.ui": {
        "technology": "UI5",
        "deviceTypes": {
            "desktop": true,
            "tablet": true,
            "phone": true
        }
    },
    "sap.ui5": {
        "dependencies": {
            "minUI5Version": "1.108.0",
            "libs": {
                "sap.ui.core": {},
                "sap.m": {}
            }
        },
        "models": {
            "i18n": {
                "type": "sap.ui.model.resource.ResourceModel",
                "settings": {
                    "bundleName": "zsapui5.test.i18n.i18n",
                    "supportedLocales": [
                        ""
                    ],
                    "fallbackLocale": ""
                }
            },
            "invoice": {
                "type": "sap.ui.model.json.JSONModel",
                "uri": "Invoices.json"
            }
        },
        "rootView": {
            "viewName": "zsapui5.test.view.App",
            "type": "XML",
            "id": "app"
        },
        "resources": {
            "css": [
                {
                    "uri": "css/style.css"
                }
            ]
        }
    }
}

2.3 创建新的视图文件

接下来,在视图文件夹下,创建一个新的视图文件InvoiceList.view.xml来显示发票信息。

变动后的项目结构如下:
在这里插入图片描述

InvoiceList.view.xml视图文件的内容如下:

<mvc:View
   xmlns="sap.m"
   xmlns:mvc="sap.ui.core.mvc">
   <List
      headerText="{i18n>invoiceListTitle}"
      class="sapUiResponsiveMargin"
      width="auto"
      items="{invoice>/Invoices}" >
      <items>
         <ObjectListItem
            title="{invoice>Quantity} x {invoice>ProductName}"/>
      </items>
   </List>
</mvc:View>

InvoiceList.view.xml视图中,将显示一个带有自定义标题的列表控件sap.m.List

sap.m.List控件的items聚合绑定到JSON数据的根路径Invoices,即items="{invoice>/Invoices}"

因为我们定义的是一个命名模型(named model),我们必须在每个绑定定义前加上标识符invoice,用于指定此命名模型。

<items>聚合中,我们为列表定义了模板,该模板将对测试数据中的每个发票自动重复。更准确地说,我们其实是使用了sap.m.ObjectListItem<items>聚合的每个聚合子项创建控件。

列表项的title属性绑定到单个发票的属性。这是通过定义一个相对路径(开头没有/)来实现的。这是可行的,因为我们通过items={invoice>/Invoices}<items>聚合绑定到发票上。

2.4 显示新的视图文件

然后,让我们在应用视图中,添加刚刚创建的InvoiceList.view.xml视图,这样,就可以将发票信息显示在HelloPanel下方的位置。
在这里插入图片描述

改动后的App.view.xml文件内容如下:

<mvc:View
    controllerName="zsapui5.test.controller.App"
    xmlns="sap.m"
    xmlns:mvc="sap.ui.core.mvc"
    displayBlock="true"
>
    <!--在视图中想要使用的库的命名空间列表-->
    <Shell>
        <App class="myAppDemoWT">
            <pages>
                <Page title="{i18n>homePageTitle}">
                    <content>
                        <mvc:XMLView viewName="zsapui5.test.view.HelloPanel" />
                        <mvc:XMLView viewName="zsapui5.test.view.InvoiceList" />
                    </content>
                </Page>
            </pages>
        </App>
    </Shell>
</mvc:View>

2.5 维护i18n

最后,在i18n文件中,为新增的文本添加键值对。
在这里插入图片描述

改动后的i18n文件内容如下:

# App Descriptor
appTitle=Hello World
appDescription=A simple app that explains the most important concepts of SAPUI5

# Hello Panel
showHelloButtonText=Say Hello
helloMsg=Hello {0}

homePageTitle=homePageTitle
helloPanelTitle=PanelTitle
openDialogButtonText=Say Hello With Dialog
dialogCloseButtonText=Ok

# Invoice List
invoiceListTitle=Invoices

2.6 运行程序

运行应用程序,我们可以看到新增加的控件 sap.m.List ,并可以看到显示出来的发票信息。
在这里插入图片描述
通过ctrl + shift + alt + s打开诊断辅助工具,我们可以看到新增加的列表控件,并可以看到每一行对应生成的item控件。
在这里插入图片描述

3. 小结

本文总结了SAPUI5中聚合绑定的概念,并通过一个具体的示例展示了其用法。


http://www.kler.cn/a/288134.html

相关文章:

  • 【代码大模型】Is Your Code Generated by ChatGPT Really Correct?论文阅读
  • Springboot定时任务
  • 制作图片马常用的五种方法总结
  • 接口文档的编写
  • SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)
  • 服务器上安装Orcale数据库以及PL SQL工具(中文)
  • 温馨网站练习运用
  • 【位运算】--- 初阶题目赏析
  • NameNode 的 Web 界面
  • 【Vue2 + Vue3】前端八股文面试题
  • 中锂天源锂电池:为卡车驻车空调提供高效、安全、持久的能源解决方案
  • 接口测试 —— 如何设计高效的测试用例!
  • 电路分析 ---- T型反馈反相比例器
  • js逆向--断点
  • 《第三十三章 高级主题 - 自定义控件》
  • [java][代码]Java中创建多线程方法
  • 第二十一届华为杯数学建模经验分享之资料分享篇
  • JS中【CSS脚本化】十个方面解读
  • CSS3文本属性详解
  • CSS中响应式设计
  • ASP.NET Core 入门教学六 异常设置
  • 对于使用Expo搭建的React Native项目:实现从图库中多选图片功能以及视频上传
  • 从心理学角度看待玄学:玄学仪式是一种通过重复和象征性行为来达到心理或情感目标的方式,能帮你放松,让你更好地面对挑战。
  • netty开发模拟qq斗地主
  • 基于SparkGraphX实现带权重的PageRank算法
  • Docker 安装 Zookeeper + Kafka 保姆级教程