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

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:Viewxmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"><ListheaderText="{i18n>invoiceListTitle}"class="sapUiResponsiveMargin"width="auto"items="{invoice>/Invoices}" ><items><ObjectListItemtitle="{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:ViewcontrollerName="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中聚合绑定的概念,并通过一个具体的示例展示了其用法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS7单机环境安装k8s集群
  • 基于ssm+vue+uniapp的“健康早知道”小程序
  • 【HarmonyOS】头像圆形裁剪功能之手势放大缩小,平移,双击缩放控制(三)
  • 如何在Centos7安装“influxDB“?
  • 网络压缩之网络剪枝(network pruning)
  • ABAP CURSOR游标的应用1
  • Acrobat Pro DC 2023 for Mac/Win:全能型PDF编辑器深度解析
  • c++ 创建对象 和 使用对象
  • LlamaIndex 使用 RouterOutputAgentWorkflow
  • Github 2024-09-02 开源项目周报 Top13
  • mysql的整理
  • AIGC大模型智能擦除:Sanster/IOPaint,python(1)
  • Linux下的exec函数簇
  • 【MySQL】深圳大学数据库实验二
  • c++ +Opencv实现车牌自动识别
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2019年如何成为全栈工程师?
  • angular2 简述
  • angular2开源库收集
  • ECMAScript6(0):ES6简明参考手册
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • javascript面向对象之创建对象
  • js递归,无限分级树形折叠菜单
  • oldjun 检测网站的经验
  • PHP CLI应用的调试原理
  • PHP的类修饰符与访问修饰符
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python利用正则抓取网页内容保存到本地
  • python学习笔记 - ThreadLocal
  • React中的“虫洞”——Context
  • 初识 beanstalkd
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 设计模式 开闭原则
  • 时间复杂度与空间复杂度分析
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 我感觉这是史上最牛的防sql注入方法类
  • 赢得Docker挑战最佳实践
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 7行Python代码的人脸识别
  • hi-nginx-1.3.4编译安装
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​secrets --- 生成管理密码的安全随机数​
  • #define,static,const,三种常量的区别
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (152)时序收敛--->(02)时序收敛二
  • (ibm)Java 语言的 XPath API
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)测试工具