6

作成したGUI拡張機能の.aspxページにTridionDateコントロールを追加しました。

これをASPXページに追加しました

<c:Date id="AdjustDate" runat="server" 
IsSeparateFields="false" AddClearButton="false" TabIndex="3"></c:Date>

そして私の.JSで私は以下を追加しました

  1. Tridion Date Controlのハンドルを教えてください(日付値などを選択するため)

    c.AdjustDate = $ controls.getControl($( "#AdjustDate")、 "Tridion.Controls.Date")

  2. 日付の変更をキャプチャします(ユーザーがモーダルダイアログで[OK]を選択した後)

    $ evt.addEventHandler(c.AdjustDate、 "change"、this.getDelegate(this._onHighlightDateChange));

イベントをキャプチャし、選択した日付に基づいていくつかの更新を実行します。

ただし、GUI拡張ダイアログの高さは、モーダルダイアログが表示されているときよりも小さくなっています。ユーザーがクリックしてモーダルダイアログが表示されたときに、ASPXダイアログのサイズを変更したいと思います。Select Date

Select Dateユーザーがボタンをクリックしたイベントをキャプチャしました

c.BtnDateSelect = $controls.getControl($("#AdjustDate_selectbutton"),
"Tridion.Controls.Button");
$evt.addEventHandler(c.BtnDateSelect, "click", 
this.getDelegate(this._onDateButtonClicked));

ただし、結合するイベントを追加できないため、結果のダイアログの高さにアクセスできないようです。

  1. ダイアログ自体を開く
  2. ユーザーが[OK]または[キャンセル](高さを再度調整するため)をクリックするか、
  3. 閉じているモーダルダイアログ

結び付けるイベントがありませんか?

を使用して[OK]ボタンへのハンドルを作成しようとしました

BtnDateOKSelect = 
$controls.getControl($("html#DatePickerPopup.popup body center div#buttonContainer div#ButtonOk.tridion"),
 "Tridion.Controls.Button");

しかし、参照(およびそのバリエーション)は未定義を返します-おそらくこれはiframe内にあるため、スクリプトはそれにアクセスできませんか?

私が結び付けることができるイベントを理解するための指針はありますか?それらのイベントにどのように結び付けるか(そしていつ)?

ありがとう

4

1 に答える 1

3

You cannot resize a dialog (modal) after it has been open. I wrote an extension where I had a similar problem, when my date picker was over my modal dialog, It look weird, so I made my dialog date picker bigger.

However I wasn't using a date picker control, but a regular html button. Here the code:

So I retrieve button and add the handler to show the date picker:

c.BtnStartDate = $controls.getControl($("#startDate"), "Tridion.Controls.Button");
$evt.addEventHandler(c.BtnStartDate, "click", this.getDelegate(this._onStartDateButtonClicked));

This is the code in the event:

SetDateRange$_onStartDateButtonClicked(event) {    
    this._setDate(event, "#startDate");

};

And the setDate function:

SetDateRange.prototype._setDate = function SetDateRange$_setDate(event, controlSelector) {
    var p = this.properties;
    var currentDate = new Date();
    var c = p.controls;


    p.datePickerPopup = $popup.create(
        $cme.Popups.DATE_PICKER.URL, {
            width: 550,
            height: 350
        },
        {
            date: currentDate,
            popupType: Tridion.Controls.Popup.Type.MODAL_IFRAME
        }
    );

    function SetDateRange$DatePicker$onPopupCanceled(event) {
        if (p.datePickerPopup) {
            p.datePickerPopup.dispose();
            p.datePickerPopup = null;
        }
    }

    function SetDateRange$DatePicker$onPopupSubmitted(event) {
        var value = event.data.date;
        if (value) {
            var value = new Date(value);

            value = $localization.getFormattedDateTime(value, Tridion.Runtime.LocaleInfo.fullDateTimeFormat);
            jQuery(controlSelector).trigger('setdate', [value]);
        }
        p.datePickerPopup.dispose();
        p.datePickerPopup = null;
    }

    $evt.addEventHandler(p.datePickerPopup, "unload", SetDateRange$DatePicker$onPopupCanceled);
    $evt.addEventHandler(p.datePickerPopup, "submit", SetDateRange$DatePicker$onPopupSubmitted);
    $evt.addEventHandler(p.datePickerPopup, "close", SetDateRange$DatePicker$onPopupCanceled);

    p.datePickerPopup.open();
};

Again, it might not be the solution to your scenario, but this example shows how to open the date picker dialog and use the values it returns, without using the "Tridion Date Picker Control".

Hope this helps.

于 2012-10-03T15:18:55.173 に答える