gpt4 book ai didi

sapui5 - this.getView().byId()、this.byId() 和 sap.ui.getCore().byId() 之间的区别

转载 作者:行者123 更新时间:2023-12-04 01:59:02 27 4
gpt4 key购买 nike

使用时能知道区别和性能吗:

const myControl = this.getView().byId("myIDhere");
const myControl = this.byId("myIDhere");
const myControl = sap.ui.getCore().byId("myIDhere");

当我在 UI5 应用中使用 XML View 时,最好使用三个中的哪一个来对控件执行操作?

最佳答案

this.getView().byId 之间的区别和 this.byId

看看 source codethis.byId方法:

// sap.ui.core.mvc.Controller
Controller.prototype.byId = function(sId) {
return this.oView ? this.oView.byId(sId) : undefined;
};

如您所见, this.byId只是this.getView().byId的捷径 .它们都可以用于访问 View 中定义的控件。例如:

<!-- Given -->
<Panel id="myPanel" />
myControllerMethod() {
const thatPanel = this.byId("myPanel"); // === this.getView().byId("myPanel")
},

关于sap.ui.getCore().byId (很少使用)*

API sap.ui.getCore().byId 另一方面,等待完全连接的全局 ID,这就是为什么您不能简单地交换 this.byId 的原因与 sap.ui.getCore().byId如果目标控件是 View 后代。

sap.ui.getCore().byId("__xmlview0--myPanel"); // <strong><-- Avoid</strong> concatenating ID parts!

一般来说, sap.ui.getCore()在开发将添加到 Fiori 启动板 (FLP) 的 UI5 应用程序时,应避免。 IE。在 Controller 中实例化控件时,不要仅传递纯字符串文字(例如 new Panel(<em>"myPanel"</em>) ),而是使用 API createId :

new Panel(this.createId("myPanel")); // makes it accessible via this.byId("myPanel")

来自话题"JavaScript Coding Issues" section "Don't create global IDs" :

[...] you must not create stable IDs for your controls, fragments, or views in OpenUI5. Doing so might result in duplicate ID errors that will break your app. Especially when running together with other apps, there could be name clashes or other errors.

Use the createId() function of a view or controller instead. This is done automatically in XMLViews and JSONViews. The createId() function adds the View ID as a prefix, thus recursively ensuring uniqueness of the ID.

* sap.ui.getCore().byId 的有效用例之一是在访问当前获得焦点的控件时,其 ID 由 calling getCurrentFocusedControlId() 检索.

关于 ID 的更多信息


SAP Fiori elements指南

在开发 Fiori 元素扩展时,确保遵守 documented compatibility guidelines ,特别是关于 byId :

[...] Don't access or manipulate SAP Fiori elements' internal coding.
[...] Must not access any UI elements that are not defined within your view extensions.

⚠ Caution
If you do not adhere to this guideline, your app may not work with future SAPUI5 versions because SAP Fiori elements might exchange controls for new ones that have a different API.

关于sapui5 - this.getView().byId()、this.byId() 和 sap.ui.getCore().byId() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48639302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com