当我按下按钮时,我想进入控制器,访问我的按钮并将文本更改为“新文本”。SAPUI5,访问控制器中的视图元素
onClick事件工作正常。但我坚持从控制器访问视图元素(myButton)。 我知道有关于此主题的线索,但我无法应用它们中的任何一个。例如, “sap.ui.getCore()。byId()”因某种原因不起作用。
有没有人有一些提示或关于从控制器访问视图元素的详细信息?
谢谢!
当我按下按钮时,我想进入控制器,访问我的按钮并将文本更改为“新文本”。SAPUI5,访问控制器中的视图元素
onClick事件工作正常。但我坚持从控制器访问视图元素(myButton)。 我知道有关于此主题的线索,但我无法应用它们中的任何一个。例如, “sap.ui.getCore()。byId()”因某种原因不起作用。
有没有人有一些提示或关于从控制器访问视图元素的详细信息?
谢谢!
对于事件“新闻”,命名为例如按钮的“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");
'oEvent.getSource()'已经返回按下按钮的实例。所以你可以缩短代码并用'var myButton = oEvent.getSource();移除额外的查找;''this.getView()也有一个快捷方式'。byId()':'this.byId()' – schnoedel
Ty @schnoedel的提示!我不知道第二个建议,但关于第一个建议很有意义!谢谢! :) – carlosfcmendes
视图元素的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查找元素。作为控制器自带的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()的JSViews,那么您的ID将是全局的。
内部视图:
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();
希望这会帮助你。
按钮的'onPress'事件处理程序将事件作为参数。你通过事件参数的getSource()方法获得对控件的引用 – Qualiture
好吧,我会尝试。谢谢!我怎样才能访问其他视图元素?就像一个不是事件源头的文本字段? – Dyrdek
通常,您不应该从控制器访问视图控件(视图应该访问控制器,而不是相反),但有些情况下确实需要它。使用'sap.ui.getCore()。byId(“someId”)'(JSView)或'this.getView().Id(“someId”)'(XMLView) – Qualiture