按下我的按钮后,我想进入我的控制器,访问我的按钮并将文本更改为new text
。
onClick事件正常。但我坚持从控制器访问视图元素(myButton)。
我知道有关于这个主题的线索,但我无法应用它们中的任何一个。
sap.ui.getCore().byId()
例如由于某种原因没有工作。
是否有人提供了有关从控制器访问视图元素的一些提示或详细信息?
答案 0 :(得分:3)
视图元素的ID应使用View.createId(sId)创建。 createId(sId)为给定的sId添加前缀,其中包含视图的ID以创建全局ID。有了这个,你的sId只需要在你的视图中是独一无二的。所以你可以使用像“button1”这样的东西,没有任何副作用。 createId("button1")
将返回类似 __ xmlview1 - button1 的内容。如果您使用XMLViews,则id属性将自动转换为全局ID(View.createId()在内部called by the xml parser)。
View.createId(sId)的吊坠是View.byId(sId)。它使用给定的视图 - 语言环境ID sId查找元素。作为一种快捷方式,Controller会自带byId(sId) function delegates to the views byId() function。
<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>
onButton1Press:function(oEvent){
var button = oEvent.getSource();
var label1 = this.byId("label1");
label1.setText(button.getId()); //Label displays "__xmlview0--button1"
}
jsbin上的示例。
如果您 - 由于某种原因 - 有全局ID,那么您必须使用sap.ui.getCore().byId(sId)来查找元素。
如果您根本没有使用任何视图或没有createId()的JSView,那么您的ID将是全局的。
答案 1 :(得分:0)
对于事件“按”,例如命名为“onPressMyButton”的按钮,您可以使用:
onPressMyButton: function(oEvent) {
var idOfMyButton = oEvent.getSource().getId();
var myButton = this.getView().byId(idOfMyButton);
myButton.setText("New Text");
}
或者在任何功能内部控制器的任何部分,您都可以使用:
var myButton = this.getView().byId("idOfMyButton");
myButton.setText("New Text");
答案 2 :(得分:-1)
内部视图:
var oButton = new sap.ui.commons.Button("this.createId("myButton")",{
text:'Click Me',
press: function(){
controller: functionName(optional);
}
});
内部控制器尝试这样做:
sap.ui.getCore().byId(this.createId("myButton")).getValue();
希望这会对你有所帮助。