2016-11-14 22 views
0

ダイアログとして使用されるフラグメントでは、通常、キャンセルイベントまたは終了イベントボタンを使用することがあります。例:ダイアログ/フラグメントを閉じるイベント

<buttons> 
    <Button text="Save" press="onSaveData" type="Accept"/> 
    <Button text="Cancel" press="onCancelBtn" type="Reject"/> 
</buttons> 

現在作業中の現在のビューに表示されるいくつかの対話があります。私はonCancelBtn()イベント関数を汎用的に構築したいので、フラグメントが渡されて閉じられる1つのclose関数を持っています - フラグメントがイベントパラメータからアクセス可能であると仮定しますが、どうすればよいでしょうか? .getView()はメインビューに当たっていませんか?

以下は私の現在の機能ですが、これは特定のダイアログを参照しています。

onCancelBtn: function(oEvent){ 
     this._oConfirmDialog.close(); 
    }, 

oEventを使用して、閉じたいフラグメントへの参照を取得するにはどうすればよいですか?誰かがoEventに関するドキュメントを私に指し示すことができるので、その構造を読んでいただければ幸いです。 APIドキュメントのEventProviderまで届いていますが、そこにはパスがありません。

答えて

2

完全に一般的なアプローチは、あなたが閉じたい含むダイアログコントロールに到達するまでの方法のgetParentのgetMetaDataを使用してトップにイベントをトリガーボタンからコントロールツリーを走査することであろう。

私が気に入っているもう1つのアプローチは次のとおりです。キャンセルボタンでダイアログインスタンスを保持するプロパティの名前を含むカスタムデータ属性を宣言し、この属性を汎用イベントハンドラで評価します。

<Button data:name="MyDialog" text="Cancel" press="onCancelDialogPressed" type="Reject"/> 

あなたは、イベントハンドラでこのカスタムデータ属性にアクセスすることができます。

onCancelDialogPressed : function(event) { 
    var name = event.getSource().data("name"); 
    if (this.fragments[name]) { 
     this.fragments[name].close(); 
    } 
} 

あなたは、このようなダイアログをインスタンス場合、これは動作します。カスタム属性で宣言された名前の下にフラグメントを格納します。

openDialogPressed : function(event) { 
    if (!this.fragments.MyDialog) { 
     this.fragments.MyDialog = sap.ui.xmlfragment("..") 
     this.getView().addDependent(this.fragments.MyDialog); 
    } 
    this.fragments.MyDialog.open(); 
} 

もちろん、コントローラでフラグメントを宣言する必要があります。クローズイベントでのコードの下に書く -

this.fragments = {}; 
+0

興味深いをoninitを。これを確認するだけで、onCancelDialogPressed関数で 'this.fragments [name]'を参照するときに '[name]'は '[data.name]'などと書く必要はありませんか? –

+1

私のせいです。もちろん、コントロールのカスタムデータから名前を取得する必要があります。回答が更新されます。 – matbtt

+0

ありがとう、それを試して確認します。 –

1

これを行うには良いとクリーンな方法があります:

onClose: function(e) { 
      e.getSource().destroy(); 
     } 
+0

ちょっと遅いですが、getSourceがクリックされたボタンを指し示すので、これは機能しません。 getSource()。getParent()でdestroy()を呼び出す必要があります。 –

関連する問題