2012-10-02 25 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非常感谢......我曾考虑模拟自己的按钮和日期控制场,现在我更加确信这是一条路。谢谢你的例子! –