通过“ addContent”将内容添加到XMLView不起作用

时间:2018-08-29 12:43:26

标签: sapui5

我有以下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;
},

但是,面板永远不会呈现:

enter image description here

但是当我调用视图的getContent函数时,该面板被列为条目。

enter image description here


说明:

sap.m.Panel中创建XMLView并不是问题。将这部分XML放入XMLView即可。

<Panel id="chartPanel"
  class="sapUiSmallMarginBeginEnd"
  width="auto"
></Panel>

但是,我需要在运行时(在控制器中)创建sap.m.Panel对象并将其附加到XMLView上,而不是 XMLView

现在,问题是:
使用上面发布的控制器代码,将创建面板对象。实际上,它甚至已注册为XMLView的内容聚合,但根本无法呈现(请参见上图)。

view-aggregation

任何关于为什么的建议以及这种行为的发生方式都将受到赞赏。

3 个答案:

答案 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)

尝试 Place_At() 而不是 add_Content()。

删除下划线。

https://www.guru99.com/sapui5-tutorial.html