在视图的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结果显示没有太明显的可预测性 - 我相信它有,但无论如何我想要一个每个显示事件。此外,我进一步充实了代码,但保留了基本结构,它似乎做了我想要的。
答案 0 :(得分:1)
这是一种有效的方法。但是您应该考虑以下用例:如果您在后端更改了加载的数据,会发生什么? JSONModel在这里没有给你任何支持,因为它只作为哑数据存储。