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

问题描述 投票:1回答:2

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


Clarification:

sap.m.Panel中创建XMLView不是问题。将这一点XML放入XMLView中。

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

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

现在,问题是: 使用上面发布的控制器代码,可以创建面板对象。事实上,它甚至被注册为XMLView的内容聚合,但它根本没有被渲染(见上图)。

view-aggregation

任何关于为什么以及如何发生这种行为的建议都非常感谢。

sapui5
2个回答
1
投票

问题

this.getView().addContent(/*...*/)不起作用。

为什么

目前,XMLView不允许通过API操纵其内容作为documentation warns

请注意,由于技术原因,不支持对此控件的内容聚合进行修改。这包括调用所有内容修改方法,如addContent等,还包括隐式删除内容聚合所包含的控件。例如,通过destroy方法销毁Control。可以调用所有功能,但可能无法正常工作或导致意外的副作用。

在撰写本文时(v1.64),情况仍然如此。


PS:以上限制仅适用于XMLview。其他视图类型(如JSView)不受影响。


0
投票

尝试将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

希望这可以帮助 :-)

最好的祝福

© www.soinside.com 2019 - 2024. All rights reserved.