SAPUI5,访问控制器中的视图元素

时间:2016-03-21 15:18:03

标签: view sap sapui5

按下我的按钮后,我想进入我的控制器,访问我的按钮并将文本更改为new text

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

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

3 个答案:

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

希望这会对你有所帮助。