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
相关产品推荐
相关产品推荐

