我一直在学习关于步骤19:重用对话框的演练教程。在下面的代码中,我无法弄清楚exit
方法的来源。在ManagedObject的API引用中找不到任何内容。
sap.ui.define([
"sap/ui/base/ManagedObject",
"sap/ui/core/Fragment"
], function (ManagedObject, Fragment) {
"use strict";
return ManagedObject.extend("sap.ui.demo.walkthrough.controller.HelloDialog", {
constructor: function(oView) {
this._oView = oView;
},
exit: function () {
delete this._oView;
},
open: function() {
// ...
}
});
});
如果API参考文件中没有记录,那么有人怎么会知道exit
可用于覆盖,更重要的是,为什么不覆盖destroy
而不是exit
?类似于:
// ...
return ManagedObject.extend("sap.ui.demo.walkthrough.controller.HelloDialog", {
constructor: function(oView) {
this._oView = oView;
},
destroy: function() {
delete this._oView;
ManagedObject.prototype.destroy.apply(this, arguments);
},
open: function() {
// ...
}
});
});
钩子方法exit
记录在ManagedObject的子类sap.ui.core.Element
中:https://openui5.hana.ondemand.com/api/sap.ui.core.Element#methods/exit
钩子方法,用于在销毁前清理元素实例。应用程序不能直接调用这个钩子方法,它是在元素被破坏时由框架调用的
Element的子类应覆盖此钩子以实现任何必要的清理exit: function() { // ... do any further cleanups of your subclass e.g. detach events... if (Element.prototype.exit) { Element.prototype.exit.apply(this, arguments); } }
有关如何使用出口挂钩的更详细描述,请参阅文档中的exit((方法部分。
sap.ui.base.Object
>.EventProvider
>.ManagedObject
>sap.ui.core.Element
>.Control
>。。
";为什么不重写destroy
"演练中没有解释的一件事是,在开发UI5内容时,主要有两个角色:
-
控件-/框架-为应用程序开发提供平台的开发人员
→覆盖受保护的方法,如exit
- 以及纯粹使用高级控件和API的应用程序开发人员
→如果不再需要控件,则应仅调用公共方法,如destroy
在步骤19中,通过扩展一个低级别类(如ManagedObject
(,您跨越了应用程序开发人员的角色,并为调用myHelloDialog.destroy()
的应用程序开发员提供了一个hook方法。