Sapui5 如何在组件环境中设置XML视图的ID?

Sapui5 如何在组件环境中设置XML视图的ID?,sapui5,Sapui5,我想从带有一些实用功能的自定义模块访问视图的控制器。基本上你可以这样做: var oController = sap.ui.getCore().byId("__xmlview1").getController(); 问题在于,上述编码在实际环境中无法工作,因为\uuuxmlview1是由框架动态创建的。因此,我尝试在实例化期间设置视图的ID。问题是-我找不到一个: 尝试在view.xml文件中为视图指定ID无效: <mvc:View controllerName="dividen

我想从带有一些实用功能的自定义模块访问视图的控制器。基本上你可以这样做:

var oController = sap.ui.getCore().byId("__xmlview1").getController();
问题在于,上述编码在实际环境中无法工作,因为
\uuuxmlview1
是由框架动态创建的。因此,我尝试在实例化期间设置视图的ID。问题是-我找不到一个:

尝试在view.xml文件中为视图指定ID无效:

<mvc:View
    controllerName="dividendgrowthtools.view.dividendcompare"
    id="testID"
    xmlns="sap.m"
    ...
问题是我不能直接控制XML视图的实例化——路由器分别负责的组件


那么,有解决这个问题的办法吗?或者至少是一种通过提供视图名称来获取视图ID的保存方式?

您应该看看SAPUI5

我很确定,您希望让控制器对dividentcompare视图执行某些操作。使用SAPUI5事件总线,您可以在不使用MVC模式的情况下将操作从一个控制器发布到另一个控制器

在dividendcompare.controller.js中:

onInit : function() {
  var oEventBus = sap.ui.getCore().getEventBus();
  oEventBus.subscribe("MyChannel", "doStuff", this.handleDoStuff, this);
  [...]
},

handleDoStuff : function (oEvent) {
   var oView = this.getView(); 
   [...]
}
onTriggerDividendStuff : function (oEvent){
   var oEventBus = sap.ui.getCore().getEventBus();
   oEventBus.publish("MyChannel", "doStuff", { [optional Params] });
}
现在,在您的anothercontroller.controller.js中:

onInit : function() {
  var oEventBus = sap.ui.getCore().getEventBus();
  oEventBus.subscribe("MyChannel", "doStuff", this.handleDoStuff, this);
  [...]
},

handleDoStuff : function (oEvent) {
   var oView = this.getView(); 
   [...]
}
onTriggerDividendStuff : function (oEvent){
   var oEventBus = sap.ui.getCore().getEventBus();
   oEventBus.publish("MyChannel", "doStuff", { [optional Params] });
}

现在,您可以在任何情况下从应用程序的每个其他控制器从dividentcontroller获取视图。您不直接访问视图,这将阻止MVC模式,但可以将选项传递给其控制器并在那里进行处理。

您应该看看SAPUI5

我很确定,您希望让控制器对dividentcompare视图执行某些操作。使用SAPUI5事件总线,您可以在不使用MVC模式的情况下将操作从一个控制器发布到另一个控制器

在dividendcompare.controller.js中:

onInit : function() {
  var oEventBus = sap.ui.getCore().getEventBus();
  oEventBus.subscribe("MyChannel", "doStuff", this.handleDoStuff, this);
  [...]
},

handleDoStuff : function (oEvent) {
   var oView = this.getView(); 
   [...]
}
onTriggerDividendStuff : function (oEvent){
   var oEventBus = sap.ui.getCore().getEventBus();
   oEventBus.publish("MyChannel", "doStuff", { [optional Params] });
}
现在,在您的anothercontroller.controller.js中:

onInit : function() {
  var oEventBus = sap.ui.getCore().getEventBus();
  oEventBus.subscribe("MyChannel", "doStuff", this.handleDoStuff, this);
  [...]
},

handleDoStuff : function (oEvent) {
   var oView = this.getView(); 
   [...]
}
onTriggerDividendStuff : function (oEvent){
   var oEventBus = sap.ui.getCore().getEventBus();
   oEventBus.publish("MyChannel", "doStuff", { [optional Params] });
}
现在,您可以在任何情况下从应用程序的每个其他控制器从dividentcontroller获取视图。您不直接访问视图,这将阻止MVC模式,但可以将选项传递给其控制器并在那里进行处理