2012-10-02 27 views
6

我有一個Tridion Date控件添加到我創建的GUI擴展.aspx頁面。Tridion日期選擇器 - 訪問事件

我已將此添加到ASPX頁面

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

,並在我的.JS我已經添加了以下到

  1. 給我一個句柄到外表套上日期控件(選擇日期值等)

    c.AdjustDate = $ controls.getControl($( 「#AdjustDate」), 「Tridion.Controls.Date」)

  2. 的日期捕捉變化(用戶在選擇modaldialog後確定)

    $ evt.addEventHandler(c.AdjustDate, 「變」, this.getDelegate(this._onHighlightDateChange));

我捕獲事件並根據所選日期執行一些更新。

但是,我的GUI擴展對話框的高度比顯示模式對話框時要小。 當用戶單擊Select Date並顯示模式對話框時,我想調整我的ASPX對話框的大小。

我現在拍攝的用戶點擊Select Date按鈕事件

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

但是 - 我似乎無法訪問出現的對話框中的高度,我不能添加任何事件綁在

  1. 對話框本身
  2. 用戶點擊確定或取消的開口(再次調整高度)或
  3. 模態對話框貝因g已關閉

我是否缺少配合的事件?

我試圖創建一個手柄使用

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

但參考OK按鈕(和它的變體)返回undefined - 可能是因爲這是在iframe中的腳本無法訪問它?

任何關於如何處理事件的指針都可以綁定到什麼地方? 如何配合這些事件(以及何時)?

謝謝

+1

讓我們不要在標籤上過度使用:這是** Tridion 2009 **或** Tridion 2011 **,它似乎是後者。 –

回答

3

在對話框(模態)打開後,您無法調整它的大小。我寫了一個擴展,其中有類似的問題,當我的日期選擇器結束了我的模式對話框時,它看起來很奇怪,所以我讓對話日期選擇器變大了。

但是我沒有使用日期選擇器控件,而是一個普通的html按鈕。下面的代碼:

所以我檢索按鈕並添加處理程序來顯示日期選取器:

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

這是事件中的代碼:

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

}; 

而且的setDate功能:

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

同樣,它可能不是您的方案的解決方案,但此示例顯示如何打開dat e選取器對話框並使用它返回的值,而不使用「Tridion Date Picker Control」。

希望這會有所幫助。

+0

Jaime非常感謝......我曾考慮模擬自己的按鈕和日期控制場,現在我更加確信這是一條路。謝謝你的例子! –