"exit"方法从何而来?它在哪里记录?



我一直在学习关于步骤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方法。

相关内容

  • 没有找到相关文章

最新更新