在选项卡单击上延迟加载数据的最佳做法

时间:2016-10-27 08:19:35

标签: sapui5

在视图的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 个答案:

答案 0 :(得分:1)

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