Zend和jQuery DatePicker产生了意想不到的结果

时间:2011-02-07 16:20:42

标签: jquery zend-framework zend-form jquery-ui-datepicker

我有一个Zend表单,我通过以下方式启用了jQuery组件:

ZendX_JQuery::enableForm($this);

然后添加了几个非jQuery元素和一个jQuery DatePicker,定义为:

$testing = new ZendX_JQuery_Form_Element_DatePicker('dp1', array('jQueryParams' => array('dateFormat' => 'yy-mm-dd')));
$testing->setLabel('Date of Birth 2')
    ->setRequired(true)
    ->addValidator('NotEmpty');

然后我按如下方式设置装饰器(首先是所有元素,然后替换DatePicker的Decorator定义):

$this->clearDecorators();
$this->addDecorator('FormElements')
    ->addDecorator('HtmlTag', array('tag' => 'div', 'class'=>'form-block'))
    ->addDecorator('Form');

$this->setElementDecorators(array(
    array('ViewHelper'),
    array('Errors'),
    array('Description', array('tag' => 'div', 'class' => 'tooltip')),
    array('Label', array('separator'=>' ')),
    array('HtmlTag', array('tag' => 'div', 'class'=>'element-block')),
));

$formJQueryElements = array(
    array('UiWidgetElement', array('tag' => '')),
    array('Errors'),
    array('Description', array('tag' => 'div', 'class' => 'tooltip')),
    array('Label', array('separator' => ' ')),
    array('HtmlTag', array('tag' => 'div', 'class' => 'element-block')),
);
$this->getElement('dp1')->clearDecorators();
$this->getElement('dp1')->setDecorators($formJQueryElements);

这似乎正确地显示了我的所有字段,但DatePicker除外,它以某种方式被转换为文本字段。该字段的HTML如下所示:

<div class="element-block">
    <label for="dp1" class="required">Date of Birth 2</label> 
    <input type="text" name="dp1" id="dp1" value="">
</div>

不是DatePicker。我在设置时错过了什么,或者我在这里犯了什么错误?

非常感谢。

1 个答案:

答案 0 :(得分:0)

至少部分找到了答案。我忘了在我的视图中包含以下代码,这意味着该字段未转换为日期字段:

<script>
    $(function() {
        $("#dp1").datepicker();
    });
</script>

将文本字段更改为DatePicker。但是这并没有保留Form类中设置的任何jQuery选项,这意味着我必须在这里设置它们,这只有在网站上的所有日期选择器使用相同的显示规则(它们没有)时才会起作用,并且我必须从使用ID更改为使用元素的类,这不是什么大问题。