2016-03-21 37 views
1

当我按下按钮时,我想进入控制器,访问我的按钮并将文本更改为“新文本”。SAPUI5,访问控制器中的视图元素

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

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

谢谢!

+0

按钮的'onPress'事件处理程序将事件作为参数。你通过事件参数的getSource()方法获得对控件的引用 – Qualiture

+0

好吧,我会尝试。谢谢!我怎样才能访问其他视图元素?就像一个不是事件源头的文本字段? – Dyrdek

+0

通常,您不应该从控制器访问视图控件(视图应该访问控制器,而不是相反),但有些情况下确实需要它。使用'sap.ui.getCore()。byId(“someId”)'(JSView)或'this.getView().Id(“someId”)'(XMLView) – Qualiture

回答

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");

+1

'oEvent.getSource()'已经返回按下按钮的实例。所以你可以缩短代码并用'var myButton = oEvent.getSource();移除额外的查找;''this.getView()也有一个快捷方式'。byId()':'this.byId()' – schnoedel

+0

Ty @schnoedel的提示!我不知道第二个建议,但关于第一个建议很有意义!谢谢! :) – carlosfcmendes

2

视图元素的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) functiondelegates 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将是全局的。

-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();

希望这会帮助你。