2016-10-27 49 views
0

在视图的onBeforeRendering()函数内,我应该如何确定模型中是否存在特定节点,如果不是,请修改模型以包含节点?这个问题是关于将数据延迟加载到模型中以便用户不常访问的数据,但如果加载了初始模型数据,则会导致性能损失。延迟加载标签点击数据的最佳做法

我的用例有一个列表页面,该列表页面指向使用单击列表中的任何项目的详细信息页面。在详细信息页面上是一组选项卡,其中显示与所选详细信息相关的子详细信息。具体来说,对任务的简要描述很长。

选项卡控件通过manifest.json样式路由引出以在标签内容区域中显示视图。

这是我目前工作的代码是视图控制器的onBeforeRendering事件中:

onBeforeRendering: function(oEvent){ 

var sPath = this.getView().getBindingContext("Projects").getPath(); // something like /task/6 
console.log('Path='+sPath) 

var oModel = this.getView().getModel("Projects"); 
var oTask = oModel.getProperty(sPath + "/brief"); 
if (oTask) { // looks like /brief exists so must already have loaded the brief 
    // nothing to do 
    console.log('Use existing data') 
} 
else { // /brief not yet present so we need to load it up 
    console.log('Load new data') 
    oModel.setProperty(sPath + "/brief", "This is the brief...") // replace with loaddata() from server, use attachRequestCompleted to call function to modify model. 
}} 

的问题 - 这是正确的做法?

编辑:基于在this question的讨论,我修改了我的代码,使用一个事件,每次显示视图时触发。 onBeforeRendering结果表明,运行时没有太多明显的可预测性 - 我确信它有它,但无论如何我想要一个每个显示事件。此外,我进一步丰富了代码,但保留了基本结构,并且似乎按照我的意愿去做。

回答

1

这是一种有效的方法。但是你应该认真考虑用例:如果你加载的数据在后端被修改了会发生什么? JSONModel在这里没有给你任何支持,因为它只能作为哑数据存储。

+0

谢谢。关于JSONModel是基于拉的,我同意。你能提出一个更好的方法来实现客户端和服务器之间的同步吗?我的使用案例不受您的观点影响,但我承认其他人很快就会出现。那么最佳做法是什么?据我所知,流行的MVC库主要支持JSON,所以这一定是一个常见问题。 –