我使用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的对象已被破坏,无法再使用。
答案 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.SimpleForm
,editable
似乎无法在没有元数据的JSON模型中工作。所以我将this example与片段一起使用。