SAPUI5 (03) - 简单控件的使用

对于熟悉微软技术的人来说,OpenUI5 的控件比较容易理解,控件在页面上有不同的外观,实现了属性 ( properties )、方法 ( methods ) 和事件 ( events ) 。我们先来实现一个简单的功能,在页面上放置一个 sap.m.Button,当用户点击它的时候,弹出一个对话框,显示 “Hello” 字符串。

sap.m.Button 简介

  • namesapce: sap.m
  • Constructor: new sap.m.Button(sId?, mSettings?);
  • setText(sText): 设置按钮的文本
  • attachPress(fnFunction): 添加 Button 的事件处理程序 ( event handler),当用户点击按钮时触发。

动手实践

在 Eclipse 中新建类型为 SAPUI5 Application Project 的项目,Project name 为 zsapui5_button。不勾选 initial view。新建完成后,编写
application area 的代码如下:

<script>
	var onButtonPressed = function() {
		alert("Hello!");
	};
	
	function initialization() {
		var oButton = new sap.m.Button();
		oButton.setText("Click me.");
		oButton.attachPress(onButtonPressed);
		
		oButton.placeAt("content");
	};
	
	sap.ui.getCore().attachInit(initialization);
	
</script>

Java 风格代码 vs JSON风格代码

以上创建一个 sap.m.Button 对象的实例 oButton,用 setText() 方法设置文本,用 attachPress() 添加时间处理程序。这种写法被称为 Java
风格的代码,还有一种 Json 风格的代码在 JavaScript 用的更加普遍。
Json 风格的代码能少代码量,但代码结构比较复杂的时候,易读性也是一个问题。以下是同样的功能 Json 风格代码的实现:

<script>
	var onButtonPressed = function() {
		alert("Hello!");
	};
	
	function initialization() {
		var oButton = new sap.m.Button({
			text: "Click me.",
			press: onButtonPressed
		});				
		
		oButton.placeAt("content");
	};
	
	sap.ui.getCore().attachInit(initialization);
	
</script>

事件处理器 (Event handler)

onButtonPressed 函数是一个 event handler,当用户点击按钮的时候,弹出一个对话框。但这个对话框中显示的字符串 Hello 是硬编码的。我们接下来把代码做两个改变,第一个改变,当用户点击的时候,显示按钮的text(也就是字符串Click me.)

我们知道,sap.m.Button.getText() 方法可以获得按钮的文本,但因为
oButton 是在函数 initialization 中,所以 onButtonPressed() 函数不能访问。所以,我们需要在 onButtonPressed 增加一个参数:

<script>
	var onButtonPressed = function(oEvent) {
		oText = oEvent.getSource().getText();
		alert(oText);
	};
	
	function initialization() {
		var oButton = new sap.m.Button({
			text: "Click me.",
			press: onButtonPressed
		});				
		
		oButton.placeAt("content");
	};
	
	sap.ui.getCore().attachInit(initialization);
	
</script>

oEvent 参数是一个 event 对象,包含很多事件的的信息。比如,我们可以用oEvent.getSource() 得到是哪一个控件触发的事件。

第二个要做的改变就是通过 getSource() 方法,让多个控件共用 event handler。我们再页面上创建两个 Button,共用一个 event handler,当用户点击的时候,显示不同的的文本:

<script>
	var onButtonPressed = function(oEvent) {
		var sId = oEvent.getSource().getId();
		
		if (sId == "btn1") {
			alert("Hello from Button1");
		}
		if (sId == "btn2") {
			alert("Hello from Button2");
		}
	};
	
	function initialization() {
		var oButton1 = new sap.m.Button("btn1", {
			text: "Button 1",
			press: onButtonPressed
		});	
		
		var oButton2 = new sap.m.Button("btn2", {
			text: "Button 2",
			press: onButtonPressed
		});
		
		oButton1.placeAt("content");
		oButton2.placeAt("content");
	};
	
	sap.ui.getCore().attachInit(initialization);
	
</script>

控件的 Aggregation 和 Association

简单控件独立存在,但界面上控件有时还要以某种关系存在。第一种关系是 包含关系 。比如容器控件中包含其他控件,又比如
radioButtonGroup 包含若干个 radioButton 。这种关系中的控件分别称为父控件 ( parent control ) 和子控件 ( child control ) 。父控件对其它控件的参照称为聚合 ( aggregation )

Aggregation 关系中,各个子控件的生命周期依赖于父控件,当父控件销毁的时候,子控件也被销毁。另外,子控件不使用 placeAt() 方法放在
DOM 对象中,而是利用父控件的方法添加到父控件的集合中,由父控件来渲染。下面使用 radioButtonGroupradioButton 说明聚合关系:

<script>
	function initialization() {
		
		var oLabel = new sap.m.Label({text: "Do you like basketball?"});
		
		var oRadioBtn1 = new sap.m.RadioButton({text: "Yes"});
		var oRadioBtn2 = new sap.m.RadioButton({text: "No"});
		
		var oRadioBtnGrp = new sap.m.RadioButtonGroup({columns: 2});
		oRadioBtnGrp.addButton(oRadioBtn1);
		oRadioBtnGrp.addButton(oRadioBtn2);
		
		oLabel.placeAt("content");
		oRadioBtnGrp.placeAt("content");
	};
	
	sap.ui.getCore().attachInit(initialization);
	
</script>

radioButtonGroupaddButton() 方法,将 radioButton 添加到radioButtonGroup 中。运行的界面如下:

第二种关系叫做 association,指一个控件参照到另外一个控件。我们刚才的例子中,labelradioButtonGroup 是完全独立的,而按照 web设计的 ARIA 兼容原则 ( ARIA: Accessible Rich Internet Applications ),这两个控件应该关联起来。通过查看 radioButtonGroup 的 API,可以设置 ariaLabelledBy 属性:

代码如下:

<script>
	function initialization() {
		
		var oLabel = new sap.m.Label({text: "Do you like basketball?"});
		
		var oRadioBtn1 = new sap.m.RadioButton({text: "Yes"});
		var oRadioBtn2 = new sap.m.RadioButton({text: "No"});
		
		var oRadioBtnGrp = new sap.m.RadioButtonGroup({
			columns: 2,
			ariaLabelledBy: oLabel});
		
		oRadioBtnGrp.addButton(oRadioBtn1);
		oRadioBtnGrp.addButton(oRadioBtn2);
		
		oLabel.placeAt("content");
		oRadioBtnGrp.placeAt("content");
	};
	
	sap.ui.getCore().attachInit(initialization);
	
</script>

和 Aggregation 不同的是,Association 中父子控件的生命周期是独立的。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 在HTML5页面中引用SAP UI5组件,可以使用以下方法: 1. 使用SAP CDN(内容分发网络)引用UI5库: ```html <!-- 在页面的head标签中引用UI5库 --> <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-libs="sap.m" data-sap-ui-theme="sap_fiori_3" data-sap-ui-compatVersion="edge" data-sap-ui-preload="async" data-sap-ui-resourceroots='{ "my.app": "./" }'> </script> ``` 2. 将UI5库下载到本地,然后在HTML页面中引用本地库: ```html <!-- 在页面的head标签中引用本地UI5库 --> <script src="./ui5/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-libs="sap.m" data-sap-ui-theme="sap_fiori_3" data-sap-ui-compatVersion="edge" data-sap-ui-preload="async" data-sap-ui-resourceroots='{ "my.app": "./" }'> </script> ``` 在引用UI5库之后,就可以在HTML页面中使用SAP UI5组件了。例如,使用SAP UI5的Button组件: ```html <!-- 在body标签中使用SAP UI5的Button组件 --> <body> <div data-sap-ui-component data-name="sap.m.Button" data-id="myButton" data-text="Click me"></div> </body> ``` 希望这些信息能帮助到你。 ### 回答2: H5引用SAP UI5的组件是一种将SAP UI5技术与HTML5相结合的方法,通过引入SAP UI5库,我们可以在HTML页面中使用SAP UI5的丰富组件来构建优秀的Web应用。 首先,我们需要在HTML页面的<head>标签内引入SAP UI5库的脚本,可以使用以下代码: ```html <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-theme="sap_bluecrystal" data-sap-ui-libs="sap.m"></script> ``` 在这个例子中,我们通过`src`属性指定SAP UI5库脚本的URL地址,`id`属性为SAP UI5的引导程序提供一个唯一的标识符。通过`data-sap-ui-theme`属性我们可以设置SAP UI5应用的主题,这里我们使用了'sap_bluecrystal'主题。通过`data-sap-ui-libs`属性我们可以指定要使用SAP UI5库,这里我们使用了'sap.m'库。 接下来,在HTML页面的<body>标签内创建一个空的容器作为SAP UI5组件的承载区域,可以使用以下代码: ```html <div id="myContainer"></div> ``` 然后,我们可以在JavaScript代码中使用SAP UI5的API来创建和配置组件,在这个例子中我们创建一个简单的Button组件,并将其添加到上述容器中,可以使用以下代码: ```javascript sap.ui.require([ "sap/m/Button", "sap/m/MessageToast" ], function(Button, MessageToast) { var oButton = new Button({ text: "Click me", press: function() { MessageToast.show("Hello World!"); } }); oButton.placeAt("myContainer"); }); ``` 在这个例子中,我们使用`sap.ui.require`函数来异步加载并初始化所需的SAP UI5模块。通过`new Button()`语句我们创建了一个Button组件的实例,并配置了它的文本和press事件处理函数。`placeAt()`方法将Button组件添加到之前创建的容器中。 最后,在浏览器中访问HTML页面,就可以看到我们引用的SAP UI5组件在页面上显示出来了。点击Button组件,会弹出一个包含"Hello World!"文本的消息提示框。 通过上述步骤,我们成功地在H5中引用了SAP UI5的组件,实现了高性能、易扩展的界面设计与交互体验。 ### 回答3: H5是一个用于构建网页和移动应用的前端技术,而SAP UI5SAP公司提供的一套专门用于构建企业级应用的UI控件库。在H5中引用SAP UI5的组件,可以通过以下步骤实现: 1. 引入SAP UI5库:在HTML文件的`<head>`标签中,添加引入SAP UI5的链接。例如: ```html <script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-libs="sap.m"> </script> ``` 2. 创建UI容器:在HTML文件中,创建用于承载SAP UI5组件的区域。例如: ```html <div id="myContainer"></div> ``` 3. 初始化SAP UI5应用:在JavaScript文件中,编写初始化SAP UI5应用的代码。例如: ```javascript sap.ui.getCore().attachInit(function() { // 创建一个控件 var oButton = new sap.m.Button({ text: "Hello UI5" }); // 将控件添加到容器中 oButton.placeAt("myContainer"); }); ``` 4. 运行应用:在浏览器中打开HTML文件,即可看到引用的SAP UI5组件在页面中显示出来。在上述示例中,将显示一个带有文本"Hello UI5"的按钮。 通过上述方法,我们可以在H5中轻松引用SAP UI5的组件,并根据需要进行进一步的定制和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值