【问题标题】:Rebind Smart Chart, or refresh it重新绑定智能图表,或刷新它
【发布时间】:2021-07-28 08:28:51
【问题描述】:

我创建了一个包含三列的主从应用程序。第一个视图是选择一个项目。第二个视图,选择 WBS 元素。第三个视图,它有一个基于从第二个视图中选择的 WBS 的智能图表。 到目前为止,第一次触发图表时它工作正常。问题是当我取消选择几个 WBS 并选择新的 WBS 时。我找不到重新绑定图表或刷新第三个视图的方法(因此 onInit 或 onBeforeRendering 再次被触发)

一旦用户点击第二个视图顶部的强调图表按钮,就会创建图表。请不要关注第二个视图的布局,它还在开发中。

希望您能帮助我找到一种方法在所选 WBS 发生更改后刷新图表。

问候, 丁乔

【问题讨论】:

    标签: binding sapui5 master-detail sapui5-smartchart


    【解决方案1】:

    您可以使用EventBus。第一次加载图表视图后,EventBus 正在“侦听”。每次您取消/选择复选框时,都会触发该事件。

    { // Chart view controller
      onInit: function() {
        this.oEventBus = this.getOwnerComponent().getEventBus();
        this.oEventBus.subscribe("Checkbox", "Selected", this.updateChart); // "Listener"
      },
      updateChart: function(channelId, eventId, data) {
        // ...
      },
    }
    
    { // WBS view controller
      onSelectWBSElement: function(oEvent) {
        const oEventBus = this.getOwnerComponent().getEventBus();
        oEventBus.publish("Checkbox", "Selected", {/*data*/});
      },
    }
    

    【讨论】:

    • 谢谢你,Boghyon!我已经按照你提到的做了,现在我可以捕捉到对所选 WBS 元素所做的任何更改。现在的问题是在监听器中我不知道如何触发图表的刷新。我尝试在侦听器中执行以下操作: var oChart = this.getView("Graph").byId("Graph"); oChart.fireBeforeRebindChart();但它抛出错误(不是函数)
    • 我能够通过执行 oChart.fireBeforeRebindChart(this.onRebindChart()); 触发事件但是在 onRebindChart 中我需要参数 oEvent,在触发事件时我没有提供它。有没有办法构建该参数?好像和控件sap.ui.base.EventProvider有关但是不知道怎么用
    • 为什么您的RebindChart 函数中需要oEvent?您可以在 onSelectWBSElement 方法中已经从列表中获取所选项目并将其写入本地模型。所以你已经在你的RebindChart 函数中选择了所有的项目。哪里需要从复选框事件中获得 oEvent?顺便提一句。这是我的答案;-)
    • 哦,对不起,亚历克斯!我对 Boghyon 的版本感到困惑。我的错 :)。我设计了图表,使其绑定到主要服务的实体集。在重新绑定中,我得到所有选定的 wbs 元素,然后使用 event.filters 来过滤实体集。如果我创建一个本地模型,那么我需要使用 customData 属性,对吧?还没有走那条路。我想我需要在他们被选中时收集 wbs 元素。请记住,一旦第一次调用带有图表的视图,监听器 updateChart 就会监听
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多