You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAPUI5关闭Fragment时前序页面数据被清除问题求助

解决SAPUI5中关闭Fragment后前序页面数据丢失的问题

嘿,这个问题我遇见过!核心原因其实是你在打开PDF Fragment的时候,替换了视图的主模型,导致原来页面绑定的模型被覆盖,所以关闭Fragment后前序页面的数据就没了。我们来一步步解决它:

问题根源分析

你这段代码里的关键问题在这里:

this.getView().setModel(this._oModel);

当你调用getView().setModel()时,如果不传模型名称,会直接替换视图的默认模型——而你的前序页面数据大概率是绑定在这个默认模型上的。替换之后,原来的模型被覆盖,页面自然就丢失了之前的数据。

解决方案:给Fragment单独设置模型

我们不需要修改视图的主模型,而是把PDF专用的模型直接设置到Fragment上,这样就不会影响原页面的模型了。

修改打开Fragment的代码

onMenuNavToTerms: function (oEvent) {
 this._sValidPath = sap.ui.require.toUrl("demo/smartapp/pdf") + "/TC.pdf";
 if (!this._onPdfDiag) {
 this._onPdfDiag = sap.ui.xmlfragment("pdfDisplayFragment", "demo.smartapp.view.DisplayPdf", this);
 this.getView().addDependent(this._onPdfDiag);
 }
 this._oModel = new JSONModel({ Source: this._sValidPath, Title: "Terms and Conditions", Height: "600px" });
 // 关键修改:给Fragment单独设置模型,而不是视图
 this._onPdfDiag.setModel(this._oModel);
 // (可选)如果Fragment里的绑定需要区分模型,也可以用命名模型:
 // this._onPdfDiag.setModel(this._oModel, "pdfModel");
 this._onPdfDiag.open();
},

对应调整Fragment的绑定(如果用命名模型的话)

如果你用了命名模型pdfModel,Fragment里的控件绑定要改成这样:

<!-- 比如PDF控件的绑定示例 -->
<ObjectAttribute text="{pdfModel>Title}" />
<PDFViewer source="{pdfModel>Source}" height="{pdfModel>Height}" />

优化关闭Fragment的代码

如果之后还需要复用这个PDF弹窗,可以不用每次都destroy,只关闭即可;如果确实不需要复用,destroy后记得把引用置空,避免内存泄漏:

onPdfCancelPressed: function (oEvent) {
 this._onPdfDiag.close();
 // 如果不需要复用弹窗,再执行下面两行
 // this._onPdfDiag.destroy();
 // this._onPdfDiag = null;
},

这样修改后,关闭Fragment时就不会影响前序页面的模型和数据了,完美解决你的问题!

内容的提问来源于stack exchange,提问作者Supreet Singh Sekhon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:37:46