从Fiori Launchpad导航后片段被破坏?

时间:2017-07-17 08:05:50

标签: 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 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启动板调用应用程序,第一次调用就可以,但是第二次在insertContent中给我这个错误:

  

具有ID XXX-detail - general的对象已被破坏,无法再使用。

1 个答案:

答案 0 :(得分:1)

显示/更改片段在退出后被销毁,但是this._fromFragment仍然存储了引用,并在我第二次进入时调用oFormFragment时返回此引用_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具有EditTogglable属性,并且在metadata.xml中需要sap:updatable="true"(我在Explore中看到过,未在doc中指定。 )

我使用sap.ui.layout.form.SimpleFormeditable似乎无法在没有元数据的JSON模型中工作。所以我将this example与片段一起使用。