如何在组件环境中设置XML-View的ID?

时间:2016-04-28 06:14:45

标签: sapui5

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

basic.js

问题是上述编码在真实环境中不起作用,因为var oController = sap.ui.getCore().byId("__xmlview1").getController(); 是由框架动态创建的。所以我试图找到在实例化期间设置视图ID的可能性。问题是 - 我找不到一个:

尝试在view.xml文件中为视图提供ID不起作用:

__xmlview1

尝试在组件的路由器配置中设置ID也不起作用:

<mvc:View
    controllerName="dividendgrowthtools.view.dividendcompare"
    id="testID"
    xmlns="sap.m"
    ...

问题在于我没有直接控制XML视图的实例化 - 路由器分别执行组件。

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

1 个答案:

答案 0 :(得分:0)

您应该查看SAPUI5 EventBus

我很确定,你想让控制器用dividentcompare视图做一些事情。使用SAPUI5 Eventbus,您可以将操作从一个控制器发布到另一个控制器,而无需制动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(); 
   [...]
}

现在,在你的anothercontroller.controller.js:

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

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