我有以下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
的内容聚合,但根本无法呈现(请参见上图)。
任何关于为什么的建议以及这种行为的发生方式都将受到赞赏。
答案 0 :(得分:1)
this.getView().addContent(/*...*/)
不起作用。
当前,XMLView
不允许通过API以documentation warns的形式操作其内容:
请注意,由于技术原因,不支持对此控件的内容聚合进行修改。这包括对所有内容修改方法(如
addContent
等的调用,还包括内容聚合所包含的控件的隐式删除)。例如,通过destroy
方法破坏了控件。可以调用所有功能,但可能无法正常工作或导致意外的副作用。
在撰写本文时(v1.64),情况仍然如此。
PS:以上限制仅适用于XMLview
。其他视图类型,例如JSView
,不受影响。
答案 1 :(得分:0)
尝试将面板放置在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
希望这会有所帮助:-)
最诚挚的问候
答案 2 :(得分:0)