2016-01-13 58 views
0

如何在我的sapUI5 XML视图中显示控制器变量?如何在sapui5 XML视图中显示控制器变量?

到目前为止,我有一个控制器

sap.ui.define([ 
    "sap/ui/core/mvc/Controller" 
], function (Controller) { 
    "use strict"; 

    return Controller.extend("sap.ui.demo.myApp.myController", { 
     onInit: function() { 
      this.myName = "Jon Doe"; 
     } 
    }); 
}); 

而一个XML视图

<mvc:View 
    controllerName="sap.ui.demo.myApp.myController" 
    xmlns="sap.m"> 
<Panel> 
    <content> 
     <Label text="bind controller myName to this label"/> 
    </content> 
</Panel> 

这是可能的,而无需使用模型绑定?如果不是,最聪明(最短)的方法是什么?

回答

2

为什么要避免模型绑定?随着模型绑定也许不是最短的,而是一个典型的短方法是:

sap.ui.define([ 
"sap/ui/core/mvc/Controller", "sap/ui/model/json/JSONModel" 
], function (Controller, JSONModel) { 
"use strict"; 

    return Controller.extend("sap.ui.demo.myApp.myController", { 
     onInit: function() { 
      this.myName = "Jon Doe"; 
      var oViewModel = new JSONModel({myName: this.myName}); 
      this.getView().setModel(oViewModel,"view"); 
     } 
    }); 
}); 

,并在视图中绑定:

<mvc:View 
    controllerName="sap.ui.demo.myApp.myController" 
    xmlns="sap.m"> 
<Panel> 
    <content> 
     <Label text="{view>/myName}"/> 
    </content> 
</Panel> 
+0

感谢您的回答。我希望可能有另一种方式来做到这一点。但你是对的:模型绑定比访问控制器中的视图更好。 – Benvorth

2

我不认为有可能在视图中使用控制器变量。

但是有一个快捷方式到这个问题:仅仅通过它id从视图中获得所需的控制的观点被渲染后,并设置要控制的任何值:

return Controller.extend("sap.ui.demo.myApp.myController", { 
    onAfterRendering: function() { 
     sap.ui.getCore().byId(this.createId("<label's id>")).setText("Jon Doe"); 
    } 
}); 

当然,上面示例中的“Jon Doe”文本可能是一个变量:

var sText = "Jon Doe"; 
sap.ui.getCore().byId(this.createId("<label's id>")).setText(sText); 
+0

感谢您的建议。我不想直接在控制器中操作View ... – Benvorth

相关问题