- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试从 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 应用程序的生命周期。
重要的是用红色圆圈突出显示的步骤。基本上,在您的 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/
从 angularjs 1.5 迁移到 1.6 的文档说“禁用(默认情况下) Controller 实例上绑定(bind)的预分配,这有助于支持原生 ES6 类。”和“依赖于存在绑定(bind)的初始
所以我一直在阅读 Angular 2,有两种方法可以做同样的事情,但我不知道它是否存在根本区别。 考虑以下问题 构造器 export class MyComponent { myAge: numb
使用 resolver 服务或在 OnInit Hook 中获取数据有什么更好的选择?例如,如果我需要从 3 个不同的来源获取数据到 1 个页面,更好的用户解析器或将代码写入 ngOnInit? 代码
应用程序一直卡在启动画面上的原因是什么?我使用 getx 状态管理。如果 authToken 不为空,它应该转到主页。但是 Controller 类中的 onInit 没有调用。 void main(
我想测试我的 customForm 组件,它使用来自另一个库的组件。首先我想测试我的组件是否初始化了嵌套库组件。让我举个例子: @Component({ selector: 'iris-fiel
无需导入 OnInit 并实现 ngOnInit(){ this.recipies=this.recipeService.getRecipies(); } 这仍然工作正常,没有任何提示,所以我为什
我有以下代码片段 import { Component, OnInit } from "@angular/core"; import { AuthenticationService } from ".
我不断遇到 OnInit 访问同一组件类中的函数的问题。 我的基本设置如下: import {Component, OnInit} from '@angular/core'; ... export c
我有以下代码片段 import { Component, OnInit } from "@angular/core"; import { AuthenticationService } from ".
在 manifest.json 中,我有以下模型定义: { "sap.ui5": { "models": { "SalesInvoices": {
我最近读了this article on smart use of ViewState并且我对 ViewState 中没有不必要的静态数据特别感兴趣。但是,我也很好奇我是否可以为父子下拉列表做同样的事
如何在我的 View 初始化时只运行一次 orderBy 过滤器?我不希望我的列表在运行时重新排序。 最佳答案 改为在 Controller 中使用 orderBy 作为过滤器: app.contr
这个问题在这里已经有了答案: Angular 2 Component Constructor Vs OnInit [duplicate] (3 个答案) 关闭 6 年前。 我只是想弄清楚 Angul
我正在尝试实现 angular 2 onInit 函数,但我在控制台中收到以下错误: Error: ReferenceError: OnInit is not defined(...) 谁能指出我做错
这个问题在这里已经有了答案: Difference between Constructor and ngOnInit (27 个答案) 关闭 6 年前。 如果我希望函数 x 在每次加载组件时都发生,
所以我注意到很多关于这个的话题,但都比较老,而且没有官方的解决方案。也许现在有解决这个问题的方法。但基本上如果你有一个带有用户名输入字段的表单,当页面第一次加载时,如果浏览器自动填充该值(因为你在浏览
在处理 Page_Init 事件或覆盖 Page 的 OnInit 方法之间,使用哪个更好?谢谢。 最佳答案 大约一年前我有这个问题,我决定覆盖而不是 On_X 事件。这是我阅读的文章,介绍了优缺点:
例如,我有两个输入属性: @Input() field1; @Input() field2; 每次初始化 field1 时,我都希望调用 function1();每次我初始化 field2 时,我都希
我的应用中有这个组件: 这是 Controller /组件定义: .component('actionsBar', { controller: 'actionsBarController',
这个问题已经有答案了: How do I invoke onInit() every time I move to a view? [duplicate] (1 个回答) 已关闭 5 年前。 我有两个
我是一名优秀的程序员,十分优秀!