this.getView().byid(),this.byid()和sap.ui.getCore().byid()之间的



我可以知道使用时的差异和性能:

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

当我在UI5应用中使用XML视图时,最好使用三个中的哪个?

this.getView().byIdthis.byId

之间的差异

根据this.byId的源代码:

Controller.prototype.byId = function(sId) {
  return this.oView ? this.oView.byId(sId) : undefined;
};

... this.byId只是this.getView().byId的快捷方式。它们都可以使用来访问视图中定义的控件。例如:

<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m">
  <!-- ... -->
  <Panel id="myPanel" />
  <!-- ... -->
</mvc:View>
myControllerMethod: function (/*...*/) {
  const thatPanel = this.byId("myPanel"); // === this.getView().byId("myPanel")
},

应用程序开发中的sap.ui.getCore().byId呢?

API sap.ui.getCore().byId等待完全串联全局ID 在UI5元素注册表中注册的全局ID ,这就是为什么如果目标控制定义为视图的一部分,则不能简单地将this.byId与CC_8交换。/p>

sap.ui.getCore().byId("someComponent---myView--myPanel"); // <-- Don't!

通常, sap.ui.getCore().byId应避免开发将添加到应用程序容器的UI5应用程序时,例如SAP Fiori LaunchPad(FLP(。
避免sap.ui.getCore().byId意味着,在JavaScript中实例化新的UI5元素时,API createId("newPanel")应与"newPanel"一起用作本地ID而不是全局:

new Panel({
  // Given this === Controller or View instance
  id: this.createId("newPanel") // makes it accessible via this.byId("newPanel")
});

从主题" JavaScript编码问题"中。部分"不要创建全局ID"

[...]您必须不是在OpenUI5中为您的控件,片段或视图创建稳定的ID。这样做可能会导致重复的ID错误,从而破坏您的应用程序。特别是在与其他应用程序一起运行时,可能会有名称冲突或其他错误。

使用 createId() 视图或控制器的功能。这是在XMLViews [...]中自动完成的。createId()功能将视图ID添加为前缀,从而递归确保ID的唯一性。

如果您确实必须使用sap.ui.getCore().byId,则自UI5 1.119 >, deprected,需要sap/ui/core/Element并调用Element.getElementById (自1.119(或Element.registry.get(自1.67起(。我想到的一个有效的用例是访问当前聚焦的控件时,通过getCurrentFocusedControlId()检索ID,直到UI5版本低于1.119。由于1.119,可以通过Element.getActiveElement()访问当前的集中控制。

在所有其他情况下,应用程序开发通常都有更好的方法。例如,您可能想收听routePatternMatchedpatternMatched,然后通过oEvent.getParameter("view").byId访问该元素,而不是尝试通过全局元素注册表访问同一元素。

有关IDS的更多信息

  • 文档主题:稳定ID:您需要知道
  • q&amp; a:如何通过ID访问XML片段的元素

偏爱模型优先的方法,而不是byId

而不是通过byId直接访问控件,而是考虑通过数据绑定来操纵UI。模型的更改将自动反映在UI中,如果启用了双向绑定,则UI的用户输入将直接存储在模型中。


SAP Fiori Elements指南

开发Fiori元素扩展时,请确保遵守已记录的兼容性指南,尤其是关于byId

[...] 不访问或操纵SAP Fiori元素的内部编码。
[...] 不得访问>不在您的 view Extensions 。。

中定义的任何UI元素

⚠小心
如果您不遵守此指南,则您的应用程序可能无法与未来的SAPUI5版本一起使用,因为SAP Fiori元素可能会为具有不同API的新的控件交换控件。

相关内容

最新更新