为什么本地 Unique ID 与 HCP 中的 ID 不一致?
Why local Unique IDs inconsistent with IDs in HCP?
我检查了应用程序中运行在HCP本地的元素,id是application-MaintainMasterData-display-component---addRoute--form
,但是当我部署到云端时,id变成了application-MaintainFleet-Display-component---addRoute--form
应用名称变了,上class方式的display
,导致我的sap.ui.getCore().byId()
入云失败。我很困惑为什么会这样。
我已经阅读了参考资料,我在事件处理程序中,我需要 oEvent 范围,所以 this.getView().byId()
和 this.createId()
对我不起作用。
参考:
sap.ui.getCore().byId() returns no element
https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/91f28be26f4d1014b6dd926db0e91070.html
=========更新=========
我也试过sap.ui.getCore().byId("application-MaintainMasterData-display-component---addRoute").byId("form")
,但同样的问题,view id
在云端application-MaintainFleet-Display-component---addRoute
。
ID 是动态生成的。所以你不能依赖他们。这就是为什么你不应该使用 sap.ui.getCore().byId()
。甚至分隔符 --
和 ---
将来也可能会更改。
您应该始终使用最近的视图或组件的 byId()
方法来解析本地 ID。您可以链接调用:component.byId("myView").byId("myControl")
在你的事件处理程序中 this
应该指的是控制器。对于 XMLViews,这应该是无需进一步处理的情况。
所以我猜你正在使用 JSViews?如果在代码中附加事件处理程序,则始终可以向 attachWhatever()
函数提供第二个参数:在事件处理程序中变为 this
的对象。
Controller.extend("myView", {
onInit:function(){
var button = this.byId("button1");
button.attachPress(this.onButtonPress, this); //The second parameter will become 'this' in the onButtonPress function
},
onButtonPress: function(oEvent){
console.log(this); //this is the controller
var buttonPressed = oEvent.getSource(); //get the control that triggered the event.
var otherControl = this.byId("table"); //access other controls by id
var view = this.getView(); //access the view
}
});
如果您使用的是设置对象语法,您可以为事件提供一个数组。它应该包含处理函数和应该成为 this
:
的对象
createContent:function(oController){
return new Button({
text: "Hello World",
press: [
function(oEvent){ console.log(this); }, //the event handler
oController //oController will be 'this' in the function above
]
});
如果您附加到非 UI5 事件,您始终可以使用闭包将视图或控制器提供给处理函数:
onInit:function(){
var that = this; //save controller reference in local variable
something.on("event", function(){ console.log(that); });
//you can use that local variable inside the eventhandler functions code.
}
我检查了应用程序中运行在HCP本地的元素,id是application-MaintainMasterData-display-component---addRoute--form
,但是当我部署到云端时,id变成了application-MaintainFleet-Display-component---addRoute--form
应用名称变了,上class方式的display
,导致我的sap.ui.getCore().byId()
入云失败。我很困惑为什么会这样。
我已经阅读了参考资料,我在事件处理程序中,我需要 oEvent 范围,所以 this.getView().byId()
和 this.createId()
对我不起作用。
参考:
sap.ui.getCore().byId() returns no element
https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/91f28be26f4d1014b6dd926db0e91070.html
=========更新=========
我也试过sap.ui.getCore().byId("application-MaintainMasterData-display-component---addRoute").byId("form")
,但同样的问题,view id
在云端application-MaintainFleet-Display-component---addRoute
。
ID 是动态生成的。所以你不能依赖他们。这就是为什么你不应该使用 sap.ui.getCore().byId()
。甚至分隔符 --
和 ---
将来也可能会更改。
您应该始终使用最近的视图或组件的 byId()
方法来解析本地 ID。您可以链接调用:component.byId("myView").byId("myControl")
在你的事件处理程序中 this
应该指的是控制器。对于 XMLViews,这应该是无需进一步处理的情况。
所以我猜你正在使用 JSViews?如果在代码中附加事件处理程序,则始终可以向 attachWhatever()
函数提供第二个参数:在事件处理程序中变为 this
的对象。
Controller.extend("myView", {
onInit:function(){
var button = this.byId("button1");
button.attachPress(this.onButtonPress, this); //The second parameter will become 'this' in the onButtonPress function
},
onButtonPress: function(oEvent){
console.log(this); //this is the controller
var buttonPressed = oEvent.getSource(); //get the control that triggered the event.
var otherControl = this.byId("table"); //access other controls by id
var view = this.getView(); //access the view
}
});
如果您使用的是设置对象语法,您可以为事件提供一个数组。它应该包含处理函数和应该成为 this
:
createContent:function(oController){
return new Button({
text: "Hello World",
press: [
function(oEvent){ console.log(this); }, //the event handler
oController //oController will be 'this' in the function above
]
});
如果您附加到非 UI5 事件,您始终可以使用闭包将视图或控制器提供给处理函数:
onInit:function(){
var that = this; //save controller reference in local variable
something.on("event", function(){ console.log(that); });
//you can use that local variable inside the eventhandler functions code.
}