Sapui5 当导航从菲奥里发射台返回时碎片被摧毁?

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

我使用了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 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,谢谢你的建议,我在回答中更新了我的理由,如果有任何错误,欢迎你改正。