在 UI5 中访问控制器中的视图元素

Dyr*_*dek 2 sapui5

当我的按钮被按下时,我想进入我的控制器,访问我的按钮并将文本更改new text为例如。

onClick事件运作良好。但是我坚持myButton从控制器访问视图元素 ( )。我知道有关于这个主题的线程,但我无法应用它们中的任何一个。sap.ui.getCore().byId()例如由于某种原因不起作用。

有没有人得到一些关于从控制器访问视图元素的提示或详细信息?

sch*_*del 5

视图元素的 ID 应使用View.createId(sId)创建。createId(sId) 在给定的 sId 前面加上视图的 ID 以创建全局 ID。有了这个,您的 sId 只需要在您的视图中是唯一的。所以你可以使用像“button1”这样的东西而没有任何副作用。createId("button1")将返回类似__xmlview1--button1 的内容。如果您使用XMLViews,id 属性将自动转换为全局 ID(View.createId()由 xml 解析器在内部调用)。

View.createId(sId)的挂件是View.byId(sId)。它查找具有给定视图区域 ID sId 的元素。作为快捷方式,控制器带来了自己的byId(sId) 函数函数委托给视图 byId() 函数

<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" controllerName="view1">
  <Button id="button1" press="onButton1Press" text="show my ID"/>
  <Label id="label1" />
</mvc:View>
Run Code Online (Sandbox Code Playgroud)
onButton1Press:function(oEvent){
  var button = oEvent.getSource();
  var label1 = this.byId("label1");
  label1.setText(button.getId()); //Label displays "__xmlview0--button1"
}
Run Code Online (Sandbox Code Playgroud)

jsbin上的示例

如果您出于某种原因拥有全局 ID,则必须使用sap.ui.getCore().byId(sId)来查找元素。

如果您根本不使用视图或不使用 createId() 的 JSViews,那么您的 ID 将是全局的。