我有以下XMLView:
<mvc:View
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
xmlns:data="sap.chart.data"
xmlns:viz="sap.viz.ui5.controls"
xmlns:con="sap.suite.ui.commons"
controllerName="MY_NAMESPACE.controller.ChartView"
xmlns:html="http://www.w3.org/1999/xhtml"
>
<!-- Panel here -->
</mvc:View>
现在,在我的控制器中,我想动态地向视图添加sap.m.Panel。在我的onInit
函数中,我将当前视图的对象传递给创建Panel的方法并将其添加到视图中。
onInit: function() {
var sUrl = "/sap/opu/odata/sap/MY_ODATA_SERVICE/",
oModel = new ODataModel(sUrl), // v2
oCurrentView = this.getView();
this.getView().setModel(oModel);
this._createPanel(oCurrentView);
this._createChartContainer();
this._initializeCharts();
this._showCharts();
},
_createPanel: function(currentView) {
var sId = this._globals.panelId;
var oViewPanel = new Panel(sId, {
width: "auto"
}).addStyleClass("sapUiSmallMarginBeginEnd");
this._globals.panelState = oViewPanel;
currentView.addContent(oViewPanel);
return currentView;
},
但是,小组从未提出:
但是当我调用视图的getContent
函数时,面板被列为条目。
在sap.m.Panel
中创建XMLView
不是问题。将这一点XML放入XMLView
中。
<Panel id="chartPanel"
class="sapUiSmallMarginBeginEnd"
width="auto"
></Panel>
但是,我需要在运行时(在控制器中)创建并将sap.m.Panel
对象附加到XMLView
,而不是在XMLView
中。
现在,问题是:
使用上面发布的控制器代码,可以创建面板对象。事实上,它甚至被注册为XMLView
的内容聚合,但它根本没有被渲染(见上图)。
任何关于为什么以及如何发生这种行为的建议都非常感谢。
this.getView().addContent(/*...*/)
不起作用。
目前,XMLView
不允许通过API操纵其内容作为documentation warns:
请注意,由于技术原因,不支持对此控件的内容聚合进行修改。这包括调用所有内容修改方法,如
addContent
等,还包括隐式删除内容聚合所包含的控件。例如,通过destroy
方法销毁Control。可以调用所有功能,但可能无法正常工作或导致意外的副作用。
在撰写本文时(v1.64),情况仍然如此。
PS:以上限制仅适用于XMLview
。其他视图类型(如JSView
)不受影响。
尝试将Panel放在XML视图中,并为其提供属性visible =“false”。
<Panel id="panelId" visible="false">
</Panel>
在你的功能中,你可以这样做:
_createPanel: function(){
var oPanel = this.getView().byId("panelId");
oPanel.setVisible(true);
// Other Methods for Panel
}
使用oPanel实例,您可以执行API中列出的所有方法:https://sapui5.hana.ondemand.com/#/api/sap.m.Panel
希望这可以帮助 :-)
最好的祝福