$ _disableLoadDefaultDecorators和ZendX_JQuery

时间:2012-02-02 14:04:06

标签: zend-framework zend-form zend-decorators

我用我的班级来改变我的形式的装饰。 换句话说,而不是调用

Application_Form_Login extends Zend_Form

我用:

Application_Form_Login extends My_Form

在我的“My_Form”课程中,我定义了以下内容:

protected $_disableLoadDefaultDecorators = true;
protected $_elementDecorators = array(
   'ViewHelper',
   array(
      'Errors', 
      array(
         'data-icon'=>"alert", 
         'class'=>"ui-body ui-body-e errors"
      )
   ),
   'Label',
   array(
      array(
         'row' => "HtmlTag"
      ), array(
         'tag'=>"div", 
         'data-role'=>"fieldcontain"
      )
   )
);

这在我的常规表格上非常完美。 但是一旦我使用jQuery表单:

$this->addElement(new ZendX_JQuery_Form_Element_AutoComplete(
   "ac1",
   array('label' => "Your Address:"))
));

它对它们没有影响,它们仍然使用默认装饰器进行渲染。 任何想法如何全局设置jQuery Form Elements的装饰器?

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。以这种方式定义的任何默认装饰器也适用于任何ZendX_JQuery_Form_Element

IF

  1. 该元素是在addElement函数内创建的。换句话说,不是以这种方式创建元素:

    $this->addElement(new ZendX_JQuery_Form_Element_AutoComplete(
        "address",
        array(
            'label' => "Your Address:"
        )
    ));
    

    您应该以这种方式创建它:

    $this->addElement('AutoComplete', 'address', array(
        'label' => "Your Address:"
    ));
    

    因为当addElement创建元素本身时,它会将默认装饰器传递给创建函数。否则,元素将在表单上下文之外创建。

  2. AutoComplete中没有Zend_Form个元素。因此,用于构建表单的类,包括所有全局设置和装饰(在我的情况下:"My_Form")应该扩展ZendX_JQuery_Form,而不是Zend_Form
  3. ZendX_JQuery_Form_Element_UiWidget需要UiWidgetElement装饰器。所以我们用ZendX_JQuery替换ViewHelper装饰器:UiWidgetElement