我想从具有一些实用功能的自定义模块访问视图的控制器。基本上你可以这样做:
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的保存方式?
答案 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模式,但可以将选项传递给它的控制器并在那里进行处理。