首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >全局模型不可访问

全局模型不可访问
EN

Stack Overflow用户
提问于 2015-10-14 09:43:52
回答 4查看 9K关注 0票数 5

我在Component.js中声明了UI5应用程序的模型,如下所示

代码语言:javascript
运行
复制
init: function() {
  sap.ui.core.UIComponent.prototype.init.apply(this);
  var oModel1 = new sap.ui.model.json.JSONModel("model/mock.json");
  sap.ui.getCore().setModel(oModel1, "oModelForSales");
},

但无法在控制器内的任何onInit方法中访问该模型,除非将模型设置为视图,如下所示:

代码语言:javascript
运行
复制
var oModel1 = new sap.ui.model.json.JSONModel("model/routes.json");
this.getView().setModel(oModel1);

控制器中的sap.ui.getCore().getModel("oModelForSales")的日志onInit将模型显示为undefined,但我能够在onBeforeRendering处理程序中获取它。

为什么在Component.js中设置的核心模型不能在onInit中访问

EN

Stack Overflow用户

发布于 2017-02-15 13:59:41

如果使用组件,请避免直接在Core上设置模型。组件应该是独立的和可重用的部件,因此默认情况下,而不是将继承核心模型。应该根据您的业务情况来设置模型:

  • /sap.ui5/models中声明的模型将在组件上设置。它们会自动传播给它的后代。给定默认模型,以下内容返回true: this.getOwnerComponent().getModel() === this.getView().getModel() //返回: true 注意:onInit 未定义中调用this.getView().getModel(),因为视图还不知道它的父在那一刻 (this.getView().getParent()返回null)。因此,在onInit中,从拥有模型的父级显式调用getModel。例如: { // My.controller.js onInit:函数{/视图被实例化,但尚未分配父函数。这里无法访问来自父级的//模型。//从组件中显式地访问模型: const myGlobalModel = this.getOwnerComponent().getModel(/*modelName*/);},}
  • 只在某些控件(如视图、面板等)上设置模型如果其他地方不需要这些数据。
  • 只有当应用程序是而不是基于组件的时候,才能在核心上设置模型。

如果核心模型或上层的任何其他模型仍应传播到组件及其子层,则在实例化propagateModel时启用ComponentContainer。

代码语言:javascript
运行
复制
new ComponentContainer({ // required from "sap/ui/core/ComponentContainer"
  //...,
  propagateModel: true // Allow propagating parent binding and model information (e.g. from the Core) to the Component and it's children.
})

但是,这也不是一个好的实践,因为核心模型可以被其他应用程序盲目地覆盖在FLP上,如SAP建议

不要,而不是,使用sap.ui.getCore()注册模型。

关于在onInit中未定义的核心模型:从1.34.0版本开始不再是这种情况了。核心模型可以从控制器中的任何位置访问。但是,正如上面所解释的,ComponentContainer的后代在默认情况下并不知道这种模型。

票数 18
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33121909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档