Walkthrough-Step19 Reuse Dialog

12 篇文章 1 订阅

窗口复用是一个非常常见和重要的能力,一定要熟练再熟练。脱离IDE,脱离输入帮助,notepad里写也要能写出来才可以。这个也是面试Fiori开发的一个必问问题。理解Step19后就可以理解UI5中是如何服用组件的。

首先,想象一下,要想跨View或是跨app之间公用Fregement,它的初始化和Open方法的实现一定是在能全局访问的组件中,比如component.js
所以首先看component.js中,加入了自定义的module HelloDialog.js
在这里插入图片描述
然后在初始化init方法中加入复用对象的实例化,对象实例化后作为component(this)的一个私有属性(_helloDialog)存在,要初始化这个实例,需要传入一个调用此dialog的view的实例作为参数,例子中是把此dialog的生命周期同app的root view绑在一起,所以传入了root view到HelloDialog的构造函数construct中,也就是this.getRootControl()。
在这里插入图片描述
接下来是生命周期方法exit和调用打开这个Dialog要用的方法openHelloDialog。
在这里插入图片描述

再看一下新建的HelloDialog.js代码,这里extend了sap.ui.base.ManagedObject来继承SAPUI5的一些核心功能,构造函数constructor,传递oView为私有属性,生命周期方法exit删除私有属性的值,open方法构建了HelloDialog的dependent,以及回调对象,然后dialog的open。
oFregmentController作为HelloDialog的回调对象,只有一个onCloseDialog方法,对应了HelloDialog Fregment中的按钮事件。
webapp/controller/HelloDialog.js (New)

sap.ui.define([
	"sap/ui/base/ManagedObject"
], function (ManagedObject) {
	"use strict";

	return ManagedObject.extend("sap.ui.demo.walkthrough.controller.HelloDialog", {

		constructor : function (oView) {
			this._oView = oView;	
		},

		exit : function () {
			delete this._oView;
		},

		open : function () {
			var oView = this._oView;
			var oDialog = oView.byId("helloDialog");
			
			// create dialog lazily
			if (!oDialog) {
				var oFragmentController = {
					onCloseDialog : function () {
						oDialog.close();
					}
				};
				// create dialog via fragment factory
				oDialog = sap.ui.xmlfragment(oView.getId(), "sap.ui.demo.walkthrough.view.HelloDialog", oFragmentController);
				// connect dialog to the root view of this component (models, lifecycle)
				oView.addDependent(oDialog);
			}
			oDialog.open();
		}
	});

});

下面是这个Dialog的使用,只需要
this.getOwnerComponent()来调用此APP的Component的openHelloDialog方法即可。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值