$ _disableLoadDefaultDecorators и ZendX_JQuery - PullRequest
0 голосов
/ 02 февраля 2012

Я использую свой класс, чтобы изменить оформление моей формы. Другими словами, вместо звонка

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 Ответ

1 голос
/ 05 февраля 2012

Я решил проблему.Все декораторы по умолчанию, определенные таким образом, также будут работать с любым 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. В Zend_Form нет элемента AutoComplete.Итак, класс, который вы используете для создания форм, который включает в себя все ваши глобальные настройки и декорации (в моем случае: "My_Form"), должен расширяться ZendX_JQuery_Form, а не Zend_Form
  3. ZendX_JQuery_Form_Element_UiWidget требует UiWidgetElement декоратор.Поэтому мы заменили декоратор ViewHelper на ZendX_JQuery: UiWidgetElement.
...