Sapui5 当导航从菲奥里发射台返回时碎片被摧毁?
我使用了2个XML片段,一个用于显示数据,另一个用于编辑 我使用以下方法切换片段:Sapui5 当导航从菲奥里发射台返回时碎片被摧毁?,sapui5,Sapui5,我使用了2个XML片段,一个用于显示数据,另一个用于编辑 我使用以下方法切换片段: onAfterRendering : function () { this._toggleForm("Display"); }, _toggleForm : function(sFragmentName) { var oPage = this._detailPage; //my detail page has an object header, a fragment form and
onAfterRendering : function () {
this._toggleForm("Display");
},
_toggleForm : function(sFragmentName) {
var oPage = this._detailPage;
//my detail page has an object header, a fragment form and a form in detail view.
if(oPage.getContent().length > 2) {
oPage.removeContent(1);
}
oPage.insertContent(this._getFormFragment(sFragmentName), 1);
},
_formFragments: {},
_getFormFragment: function (sFragmentName) {
var oFormFragment = this._formFragments[sFragmentName],
oView = this.getView();
if (oFormFragment) {
return oFormFragment;
}
oFormFragment = sap.ui.xmlfragment(oView.getId(), "namespace.fragment." + sFragmentName, this);
oView.addDependent(oFormFragment);
return this._formFragments[sFragmentName] = oFormFragment;
}
一切正常。。。但是,如果我从Fiori launchpad调用该应用程序,第一次调用是可以的,但是第二次在insertContent
中给我这个错误:
ID为XXX detail--general的对象已销毁,无法再使用
显示/更改片段在退出后被销毁,但此.\u fromFragment仍然存储了一个引用,并在我第二次输入时调用了
\u getFormFragment
时返回了此引用,这导致了此错误
通过添加修复:
onExit : function () {
for(var sPropertyName in this._formFragments) {
if(!this._formFragments.hasOwnProperty(sPropertyName)) {
return;
}
this._formFragments[sPropertyName].destroy();
this._formFragments[sPropertyName] = null;
}
}
回答@AndriiNaumovych的问题: 似乎只有
sap.ui.comp.smartform.smartform
有一个属性,它需要在metadata.xml中有一个sap:updateable=“true”
(我在中看到了,在文档中没有指定)
我使用
sap.ui.layout.form.SimpleForm
,editable
在没有元数据的JSON模型中似乎不起作用。所以我使用fragment。为什么不为表单元素使用可编辑状态?这比销毁和交换碎片更容易。。你不这么认为吗?@AndriiNaumovych,谢谢你的建议,我在回答中更新了我的理由,如果有任何错误,欢迎你改正。