2017-07-17 16 views
1

2つのXMLフラグメントを使用します.1つは表示データ用、もう1つは編集用です。Fiori Launchpadから戻るとフラグメントが破棄されますか?

私はこの方法を使用してフラグメントを切り替える:

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; 
} 

すべてが正常に動作します...しかし、私はフィオーリ・ランチパッドからアプリを呼び出す場合、最初の呼び出しはOKですが、二度目は私にこれを与えますinsertContentのエラー:

ID XXX-detail - generalのオブジェクトは破棄され、もう使用できません。

+0

なぜフォーム要素に編集可能な状態を使用しないのですか?断片を破壊して切り替えるよりも簡単です。そうは思わないでしょうか? –

+0

@AndriiNaumovych、あなたの提案のおかげで、私は私の答えで私の理由を更新した、何か間違いがある場合、あなたはそれを修正することを歓迎する以上です。 – Tina

答えて

1

照会/変更断片が終了した後に破壊されるが、this._fromFragmentはまだ参照を記憶し、私はこのエラーの原因となった第二の時間を、入力されたとき_getFormFragmentが呼び出されたときに、この基準oFormFragmentを返さ。アドオンによって固定

 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.SmartFormEditTogglable性質を持っているようだ、それはのmetadata.xmlにsap:updatable="true"を必要とする(I Exploreで、これはdocで指定されていません)

私はsap.ui.layout.form.SimpleForm,editableはメタデータのないJSONモデルでは動作しないようです。ですから、私はthis exampleを断片と使用します。

関連する問題