gpt4 book ai didi

javascript - 在 Controller 的 onInit 中读取 OData 上下文

转载 作者:行者123 更新时间:2023-11-29 19:03:09 31 4
gpt4 key购买 nike

我尝试从 OData 源准备数据,以在我的 fiori 应用程序中以条形图显示它。为此,我在 manifest.json 中设置了 OData 模型。使用列表进行测试,只需使用

items="{path : 'modelname>/dataset'}

工作正常并显示内容。

为了为图表 (VizFrame) 准备数据,我使用了 View Controller (mvc:XMLView) 中的 onInit() 函数。数据准备类似于 question 中讨论的数据准备。 .

首先我获得了 ODataModel:

var oODataModel = this.getOwnerComponent().getModel("modelname");

接下来我进行绑定(bind):

var oBindings = oODataModel.bindList("/dataset");

不幸的是,oBindings().getContexts() 数组始终为空,而且 oBindings.getLength() 也为零。因此,VizFrame 仅显示“无数据”。

可能是onInit()函数的时候数据模型没有完全加载,还是我理解错了访问数据的方式?

提前致谢

更新我通过使用从将数据显示为列表的 View 自动创建的绑定(bind)临时解决了这个问题。我从绑定(bind) getView().byId("myList").getBindings("items") 中获取“dataReceived”事件并在那里进行计算。图表的模型(因为它在不同的 View 中使用)在 Component.js 中创建,并在核心 sap.ui.getCore().setModel("graphModel") 中注册。我认为这个解决方案很脏,因为图形数据依赖于来自不同 View 的列表数据,这会导致问题,例如当您使用不断增长的列表时(因为绑定(bind)中的数据得到更新并且从 odata 模型中选择了不同的范围)。有什么建议,我如何在不依赖不同列表的情况下获取 odata 模型条目?

最佳答案

下图概述了 UI5 应用程序的生命周期。

enter image description here

重要的是用红色圆圈突出显示的步骤。基本上,在您的 onInit 中,您无法通过 this.getView().getModel() 完全访问您的模型。

这可能就是您尝试使用 this.getOwnerComponent().getModel() 的原因。这使您可以访问模型,但它尚未绑定(bind)到 View ,因此您不会获得任何上下文。

类似地,metadataLoaded() 返回一个过早完成的 Promise:在加载元数据之后,可能在任何 View 绑定(bind)完成之前。

我平时做的是

  • 使用onBeforeRendering

这是在 onInit 之后立即调用的生命周期 Hook 。 View 及其模型存在,但尚未向用户显示。用你的模型做事的可能性很大。

  • 使用onRouteMatched

这不是真正的生命周期 Hook ,而是一个事件处理程序,可以绑定(bind)到您应用程序的路由器对象。由于您在 onInit 中定义了事件处理程序,它将在稍后调用(但不会太晚),然后您可以执行所需的操作。这显然只有在您设置了路由时才有效。

关于javascript - 在 Controller 的 onInit 中读取 OData 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45321403/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com