Fiori Master Detail应用程序路由,具有多个参数



我目前正在开发我的第一个SAP Fiori应用程序。在SAP WebIDE中,我使用Master Detail从模板创建了一个项目,并将其连接到我的oData Service。

如果我运行未修改的应用程序,除了没有数据加载到Detail View之外,一切都正常,因为oData Service需要2个参数来获得唯一的记录。

现在的问题是,如果我修改应用程序以使用2个参数并导航到详细信息视图,详细信息视图会加载,但甚至不会访问oData服务。(Chrome开发工具中没有$batch请求(

manifest.json 中的修改

{
"pattern": "JOBSSet/{Jobname}/{Jobcount}",
"name": "object",
"target": [
"master",
"object"
]
}

主控制器修改:

_showDetail : function (oItem) {
var bReplace = !Device.system.phone;
// set the layout property of FCL control to show two columns
this.getModel("appView").setProperty("/layout", "TwoColumnsMidExpanded");
this.getRouter().navTo("object", {
Jobname : encodeURIComponent(oItem.getBindingContext().getProperty("Jobname")),
Jobcount : oItem.getBindingContext().getProperty("Jobcount")
}, bReplace);
}

细节控制器的修改:

_onObjectMatched : function (oEvent) {
var sJobname =  decodeURIComponent(oEvent.getParameter("arguments").Jobname);
var sJobcount =  oEvent.getParameter("arguments").Jobcount;
this.getModel("appView").setProperty("/layout", "TwoColumnsMidExpanded");
this.getModel().metadataLoaded().then( function() {
var sObjectPath = this.getModel().createKey("JOBSSet", {
Jobname :  sJobname,
Jobcount : sJobcount
});
this._bindView("/" + sObjectPath);
}.bind(this));
}

只有当您从应用程序的第一个页面开始运行时,才会发生这种行为。

例如,如果你在智能手机中测试该应用程序(或使用Chrome开发工具进行模拟(,你会发现当该应用程序直接打开到详细信息页面时,会有一个网络调用来获取项目详细信息。这也是一个$batch调用,但在其中你会发现一个'GET/JOBSSet(Jobname='x',Jobcount='y'(。

基本上会发生以下情况:默认情况下,UI5将数据缓存在Context对象中(假设您使用的是v2.ODataModel类(。当你运行应用程序并看到"作业"列表时,库已经为从oData服务返回的每个记录创建了一个Context对象。

如果稍后在应用程序中创建Context对象(直接或间接,如bindElement方法(,UI5将检查给定的路径-/JOBSSet(Jobname='x',Jobcount='y')。如果已经有一个上下文与该路径链接,那么该上下文应该已经存在于主内存中。因此,不需要额外的电话。

最新更新