1

apex.widget.datepicker を呼び出して、「ページの読み込み時に実行」内のフィールドに時間とともにカスタム日付ピッカーを適用しようとしています。以前のバージョンの Apex では問題なく機能していましたが、最近 Apex 4.1.1.00.23 に移行しました。

ページの読み込み時に表示される JS エラーは、「TypeError: undefined をオブジェクトに変換できません」です。

別のメモとして、フィールドのタイプを日付に変更できますが、その特定のフィールドにバインドされている jquery 日付オブジェクトをカスタマイズするにはどうすればよいですか?

4

1 に答える 1

1

4.1.1 ワークスペースにアクセスできるようになったとき (apex.oracle.com が 4.2 に更新されたため)、すぐに問題を再現しようとしました。しかし、私はできません!apex.oracle.com で問題があったことは断言しますが、間違いを犯したかどうかはもうわかりません。

実際、4.1.0 と 4.1.1 はまったく同じように応答します。4.2 は違いますが、少しだけです。なぜ今まで多くの時間を無駄にしてきたのかわかりませんが、明らかな論理的欠陥を本当に見逃していたに違いありません。

ただし、4.0 と 4.1 の間で何が変わったのかわからないので、4.0 で日付ピッカーを初期化するために何をしたかわかりません。アイテムを呼び出して機能させるだけでよい場合apex.widget.datepicker、4.1 では追加の手順が必要になるため、少し変更されます。

を呼び出す前apex.widget.datepickerに、ロケールがロードされていることを確認する必要があります。アクション>フィルターメニューを開いたときにapexによって行われたajax呼び出しを調べて、これをスパイしました。このコードは、ディレクトリ内の datepicker ロケール ファイルに設定されたソースを含む script タグを追加しますapex_images。このファイルは、datepicker のいくつかの変数を初期化します。
たとえば、言語 English = のアプリケーションは、次の'en'ように初期化されます。apex.jQuery.datepicker.regional['en']

ウィジェット コードがこれらのロケール変数にアクセスしようとするため、これが発生しないとundefinedオブジェクト エラーが発生するため、これは重要です。スクリプト コードが追加されていない場合は追加されずapex.widget.datepicker、エラーがスローされます。

datepicker コードが機能することを確認するには、ロケール JavaScript ファイルを含める必要があります。これを行うには、ページ ヘッダー、ページ自体、またはテンプレートに追加するか、動的に行うことができます。最適な場所を決定するのはあなた次第です。

ロケール ファイルを動的に追加する例を次に示します。

$(document).append('<script type="text/javascript" src="/i/libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>');

これにより、指定されたディレクトリにファイルが取得され (actions>filter と同じ)、次のようになります。

//******  AMERICAN  ******
apex.jQuery(function($){
apex.jQuery.datepicker.regional['en'] = {
closeText: "Close",
prevText: "Prev",
nextText: "Next",
currentText: "Today",
monthNames: ["January","February","March","April","May","June","July","August","September","October","November","December" ],
monthNamesShort: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ],
dayNames: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" ],
dayNamesShort: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat" ],
dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa" ],
weekHeader: "Wk",
dateFormat: "dd-M-y",firstDay: 0,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ""};
apex.jQuery.datepicker.setDefaults(apex.jQuery.datepicker.regional['en']);
});

さて、そのパスにはいくつかのハードコーディングの問題があることに注意してください。「/i/」、jquery バージョン、およびロケールがあります。jquery バージョンについてできることはあまりありません。 ロケール/i/で置き換えることができます アプリケーション変数でキャッチできますapex_img_dirBROWSER_LANGUAGE

$(document).append('<script type="text/javascript" src="'+apex_img_dir+'libraries/jquery-ui/1.8.14/ui/i18n/oracle/jquery.ui.datepicker-&BROWSER_LANGUAGE..js"></script>');

トリックを行う必要があります(確認するためにajax呼び出しを調べてください!

スクリプトが含まれたら、apex.widget.datepicker を安全に呼び出すことができます。

今、私も4.2で実験してきましたが、ほとんど同じです。変更された唯一のことは、ウィジェット コードを含める必要があることです

$(document).append('<script type="text/javascript" src="'+apex_img_dir+'libraries/jquery-ui/1.8.22/ui/i18n/oracle/jquery.ui.datepicker-en.js"></script>' +
'<script type="text/javascript" src="'+apex_img_dir+'libraries/apex/minified/widget.datepicker.min.js?v=4.2.0.00.19"></script>');

これで大部分をカバーできるはずです。

于 2012-09-18T19:01:11.350 に答える