第20步:聚合绑定

本文介绍了如何在SAPUI5应用中通过JSON格式的发票数据,实现数据绑定并展示发票清单。涉及JSONModel的配置、XML视图的使用和发票数据的显示。

说明

现在我们已经为应用建立了一个良好的结构,是时候添加更多功能了。通过添加JSON格式的发票数据,我们开始探索数据绑定的更多特性,这些数据显示在面板下方的列表中。


预览

在这里插入图片描述

一个发票清单显示在面板下方

代码

你可以在演练-第20步查看和下载所有文件。

webapp/Invoices.json (New)

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

发票文件仅包含5个JSON格式的发票,我们可以用它在应用中绑定控件。JSON是一种非常轻量级的数据存储格式,可以直接作为SAPUI5应用的数据源使用。

webapp/manifest.json
在这里插入图片描述

{"sap.ui5": {
	"rootView": "sap.ui.demo.walkthrough.view.App",
[]
	"models": {
	  "i18n": {
		"type": "sap.ui.model.resource.ResourceModel",
		"settings": {
		  "bundleName": "sap.ui.demo.walkthrough.i18n.i18n",
		  "supportedLocales": [""],
		  "fallbackLocale": ""
		}
	  },
	  "invoice": {
		"type": "sap.ui.model.json.JSONModel",
		"uri": "Invoices.json"
	  }
	}
  }
}

我们将一个新的模型发票添加到描述符的sap.ui5部分。这一次我们想要一个JSONModel,因此我们将类型设置为sap.ui.model.json.JSONModel。键uri是相对于组件的测试数据的路径。通过这个小配置,我们的组件将自动实例化一个新的JSONModel,它将从Invoices.json文件加载发票数据。最后,实例化的JSONModel作为一个命名模型invoice放到组件上。命名模型在整个应用中可见。

注意
自动模型实例化仅在SAPUI5版本1.30中可用。如果你使用的是旧版本,你可以在Component.js文件的init方法中手动实例化资源包和应用程序的其他模型,就像我们在步骤9:组件配置中对资源包所做的那样。

webapp/view/App.view.xml
在这里插入图片描述

<mvc:View
	controllerName="sap.ui.demo.walkthrough.controller.App"
	xmlns="sap.m"
	xmlns:mvc="sap.ui.core.mvc"
	displayBlock="true">
	<Shell>
		<App class="myAppDemoWT">
			<pages>
				<Page title="{i18n>homePageTitle}">
					<headerContent>
						<Button
							icon="sap-icon://hello-world"
							press=".onOpenDialog"/>
					</headerContent>
					<content>
						<mvc:XMLView viewName="sap.ui.demo.walkthrough.view.HelloPanel"/>
						<mvc:XMLView viewName="sap.ui.demo.walkthrough.view.InvoiceList"/>
					</content>
				</Page>
			</pages>
		</App>
	</Shell>
</mvc:View>

在应用程序视图中,我们添加了第二个视图来显示面板下面的发票。

webapp/view/InvoiceList.view.xml (New)

<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>

新视图显示一个带有自定义标题文本的列表控件。列表的行项目聚合被绑定到JSON数据的根路径Invoices 上。因为我们定义了一个命名模型,所以我们必须在每个绑定定义的前面加上标识符 invoice>。

在items聚合中,我们为列表定义了模板,该模板自动为我们测试数据的每个发票重复创建行。更准确地说,我们使用objectistitem为items聚合的每个聚合子项创建控件。列表项的title属性绑定到单个发票的属性。这是通过定义一个相对路径来实现的(开头没有 / )。这是因为我们已经通过 items={invoice>/Invoices} 将items聚合绑定到invoices。

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

# Invoice List
invoiceListTitle=Invoices

在文本包中新增了列表的标题。

章节

  1. 第1步:你好世界
  2. 第2步:引导
  3. 第3步:控件
  4. 第4步:XML视图
  5. 第5步:控制器
  6. 第6步:模块
  7. 第7步:JSON模型
  8. 第8步:可翻译的文本
  9. 第9步:组件配置
  10. 第10步:应用程序描述符
  11. 第11步:页面和面板
  12. 第12步:Shell控件作为容器
  13. 第13步:外边距和内边距
  14. 第14步:自定义CSS和主题颜色
  15. 第15步:嵌套视图
  16. 第16步:对话框和片段
  17. 第17步:片段回调
  18. 第18步:图标
  19. 第19步:重用对话框
  20. 第20步:聚合绑定
  21. 第21步:数据类型
  22. 第22步:表达式绑定
  23. 第23步:自定义格式器
  24. 第24步:过滤
  25. 第25步:排序和分组
  26. 第26步:远程OData服务
  27. 第27步:模拟服务器配置
  28. 第28步:使用QUnit进行单元测试
  29. 第29步:与OPA的集成测试
  30. 第30步:调试工具
  31. 第31步:路由和导航
  32. 第32步:路由与参数
  33. 第33步:路由回溯和历史
  34. 第34步:自定义控件
  35. 第35步:响应性
  36. 第36步:设备适应
  37. 第37步:内容密度
  38. 第38步:可访问性
### 三层聚合与二层聚合的区别及使用场景 #### 区别 1. **工作层次** - 二层链路聚合主要在数据链路层(OSI模型的第二层)实现,通过将多个物理接口绑定为一个逻辑接口来增加带宽和提供冗余。它通常用于交换机之间的连接,不需要配置IP地址[^3]。 - 三层链路聚合则在网络层(OSI模型的第三层)实现,通过将多个三层接口绑定到一个虚拟接口上,形成一个逻辑接口。这种模式需要配置IP地址,并且支持路由功能[^2]。 2. **协议支持** - 二层链路聚合可以使用静态LACP(Link Aggregation Control Protocol)或动态LACP模式,具体取决于设备的配置需求。它主要用于局域网内同一子网中的设备互联[^3]。 - 三层链路聚合同样可以使用LACP或其他负载均衡机制,但其重点在于提供跨子网的通信能力。因此,它需要配置相应的路由协议以确保不同网络间的连通性[^2]。 3. **配置复杂度** - 二层链路聚合相对简单,只需确保参与聚合的端口属于同一VLAN即可。此外,可以通过`portswitch`命令轻松切换接口的工作模式。 - 三层链路聚合的配置较为复杂,除了基本的链路绑定外,还需要设置虚拟IP地址、子网掩码以及相关路由条目。例如,在华为设备中,可通过`undo portswitch`命令将接口切换至三层模式[^4]。 4. **应用场景** - 二层链路聚合适用于同一子网内的高带宽需求场景,如服务器集群之间的互连、数据中心内部的交换机互联等[^3]。 - 三层链路聚合更适合跨子网或跨网络的高可靠性需求场景,例如路由器之间的互联、分支办公室与总部之间的链路聚合等[^2]。 #### 使用场景示例 - **二层链路聚合**:假设在一个数据中心中,有两台核心交换机需要通过多条千兆以太网链路进行互联。为了提高带宽利用率并提供链路冗余,可以采用二层链路聚合技术将这些物理链路绑定成一个逻辑链路[^3]。 ```python # 配置示例:二层Eth-Trunk interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan 10 20 ``` - **三层链路聚合**:如果在网络边界处有一对路由器需要通过多条万兆以太网链路进行互联,则可以使用三层链路聚合技术。这样不仅可以提升带宽,还可以通过配置BGP或OSPF等动态路由协议来增强网络的健壮性[^2]。 ```python # 配置示例:三层Eth-Trunk interface Eth-Trunk2 undo portswitch ip address 192.168.1.1 255.255.255.0 ``` ### 总结 二层链路聚合和三层链路聚合各有特点和适用范围。选择哪种技术取决于具体的网络架构和业务需求。对于同一子网内的高带宽需求,二层链路聚合是理想选择;而对于跨子网或跨网络的高可靠性需求,则应考虑三层链路聚合[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值