我用我的班级来改变我的形式的装饰。 换句话说,而不是调用
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的装饰器?
答案 0 :(得分:1)
我已经解决了这个问题。以这种方式定义的任何默认装饰器也适用于任何ZendX_JQuery_Form_Element
该元素是在addElement
函数内创建的。换句话说,不是以这种方式创建元素:
$this->addElement(new ZendX_JQuery_Form_Element_AutoComplete(
"address",
array(
'label' => "Your Address:"
)
));
您应该以这种方式创建它:
$this->addElement('AutoComplete', 'address', array(
'label' => "Your Address:"
));
因为当addElement
创建元素本身时,它会将默认装饰器传递给创建函数。否则,元素将在表单上下文之外创建。
AutoComplete
中没有Zend_Form
个元素。因此,用于构建表单的类,包括所有全局设置和装饰(在我的情况下:"My_Form"
)应该扩展ZendX_JQuery_Form
,而不是Zend_Form
ZendX_JQuery_Form_Element_UiWidget
需要UiWidgetElement
装饰器。所以我们用ZendX_JQuery替换ViewHelper
装饰器:UiWidgetElement
。