先日の記事、APEXリストを使った実装も悪くはないけど、直接メニュー・ウィジェットを扱う方法もある、と教えていただいたので試してみました。
初めにAPEXリストと全く同じ動作をする実装を行います。次にメニュー・ウィジェットをradioGroupとして作成します。radioGroupにすると、以下のように動作します。
APEXリストのリージョンの代わりに、静的コンテンツのリージョンを作成します。
ソースのHTMLコードとして以下を記述します。
<div id="selectjob_menu"></div>
idはselectjob_menuとしていますが、APEXリストとは異なり必ずしも_menuをつける必要はありません。ボタンにdata-menu="selectjob_menu"と設定済みのため、その名前に一致させています。
レイアウトの位置はDialogs, Drawers and Popupsを選択します。外観のテンプレートとしてBlank with Attributes(No Grid)を選択します。
ページ・プロパティのJavaScriptのページ・ロード時に実行に以下を記述します。
以上の変更で、こちらの記事と同じ動作になります。
メニュー・ウィジェットをJavaScriptのコードで作成する場合は、typeとしてaction以外にradioGroupやtoggleといった形式を選ぶことができます。
typeとしてradioGroupを選択し、メニュー・ポップアップを実装するコードです。ページ・ロード時に実行に記述したコードを入れ替えます。
アプリケーションを実行すると、記事の先頭のGIF動画のような動作になります。
https://github.com/ujnak/apexapps/blob/master/exports/menu-popup-with-action.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
追記
表EMP(サンプル・データセットのEMP/DEPTに含まれる)の列JOBの個別値をデータベースから取得し、メニュー・ポップアップのchoicesとして設定する方法は、
choicesの配列を返すAjaxコールバックを作成します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_response clob; | |
begin | |
select json_arrayagg(json_object('label' value job, 'value' value job)) | |
into l_response | |
from ( | |
select distinct job as job from emp | |
); | |
htp.p(l_response); | |
end; |
Ajaxコールバックを呼び出してから、メニュー・ウィジェットを作成します。
完