Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sapui5 为什么此.setModel()会根据上下文表现出不同的行为_Sapui5 - Fatal编程技术网

Sapui5 为什么此.setModel()会根据上下文表现出不同的行为

Sapui5 为什么此.setModel()会根据上下文表现出不同的行为,sapui5,Sapui5,我已经学习了这些教程,现在我正在尝试将这些学习扩展到一个真正的应用程序中。在我的应用程序中,我使用JSON模型。与教程不同的是,我的应用程序是一个真实世界的应用程序,在加载数据模型时,我必须获得用户凭据以充当过滤器。在教程中,模型加载到component.js中。在我的应用程序中,我必须提示用户输入id和密码,以便在应用程序的第一个视图上显示一个登录片段。这恰好是一个主视图,关键是它在component.js之后运行。验证用户后,我通过Ajax从服务器收集JSON数据,并通过这个.setData

我已经学习了这些教程,现在我正在尝试将这些学习扩展到一个真正的应用程序中。在我的应用程序中,我使用JSON模型。与教程不同的是,我的应用程序是一个真实世界的应用程序,在加载数据模型时,我必须获得用户凭据以充当过滤器。在教程中,模型加载到component.js中。在我的应用程序中,我必须提示用户输入id和密码,以便在应用程序的第一个视图上显示一个登录片段。这恰好是一个主视图,关键是它在component.js之后运行。验证用户后,我通过Ajax从服务器收集JSON数据,并通过这个.setData(my_JSON)将其放入默认模型

在测试从主视图到详细视图的路由时,我产生了一个顽固的错误,在详细视图中调用的this.getModel()生成了一个空模型。哈-我刚刚在主视图中设置了模型,可以在表控件中看到数据-给出了什么

我考虑了一个路由问题,但确认这不是问题所在-我可以控制台记录通过路由器的参数,不管怎样,细节视图显示出来,这样路由就可以了

概述:我在母版页中使用这个.setModel(),然后在细节页中使用这个.getModel(),但后者是一个空模型

问题:我希望该模型可以在整个应用程序中使用。教程主要介绍如何在component.js中设置模型,但我不能。例如,从主视图或非component.js的任何其他位置设置全局模型的正确语法是什么

我认为我需要在master中使用以下内容(最后一行很重要):


因此,我假设component.js上下文中的内容是app global,而视图中的内容与视图相关,这是有意义的。我说的对吗?

在教程
中,组件中的这个.setModel(…)
将直接在组件上设置模型。因此,该模型在该组件内的所有视图中都可见

当您在控制器中看到
this.getView().setModel(…)
时,您知道该模型仅在该视图上设置(因此它的子视图也可见)

但是,如果在控制器中看到类似于
this.setModel(…)
的内容,则应检查
this.setModel(…)
内部发生的情况。模型可能是在视图上、组件上,甚至是其他地方设置的!一些教程使用了所谓的“BaseController”概念。这基本上是其他控制器的父控制器,因此这种方法允许编写一些方便的API,您可以轻松地在扩展自此BaseController的子控制器中重用这些API。例如,看一看。在那里,您可以看到
setModel(…)
API正在视图上设置模型。这意味着无论何时在扩展自该BaseController的控制器中调用
this.setModel(…)
,都会在视图中设置模型

此外,由于在Master Detail应用程序中,Master页和Details页之间没有层次结构(父/子关系),因此主视图中的模型在Detail视图中不可见

在您的情况下,最好直接在组件上设置模型。你可以打电话来

this.getOwnerComponent().setModel(...);

在任何控制器内。或者直接在Component.js上执行。您可以稍后将数据传播到该模型,即稍后随时从您的控制器中传播。

谢谢Nabi-非常清楚,我将为将来可能需要参考的内容添加书签。在我提出这个问题之前的努力中,我试图通过getOwnerComponent().getModel()在细节视图中获取模型,现在我发现,如果我使用getOwnerComponent().setModel()将模型从主视图设置到组件中,它就会起作用。如此接近,却又如此遥远。
this.setModel(oModel);  // a line in component.js
this.getOwnerComponent().setModel(...);