Добавить подчиненную форму в форму с помощью ajax при отправке

Я прочитал эту статью: http://www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/

Это было очень интересно и прекрасно работает.

Мне нужно сделать то же самое, но с подформой. Я имею в виду, что когда пользователь нажимает кнопку, я вызываю через ajax действие, которое добавляет, присоединяет и отображает подчиненную форму к моей существующей форме.

Например:
У меня есть форма, в которой пользователь должен заполнить имя и фамилию своих детей, поэтому есть кнопка «Добавить ребенка». Когда пользователь нажимает эту кнопку, к моей существующей форме должна быть добавлена ​​и отображена подформа. При отправке он будет подтвержден точно так же, как в примере из этой статьи. Единственная разница в том, что там он просто добавляет одно поле. Мне нужно добавить подформу, но точно так же.

В своем действии (вызываемом Ajax) я пробовал следующее:

public function clonerecursivegroupAction()
{
    $this->_helper->layout->disableLayout();
    $ajaxContext = $this->_helper->getHelper('AjaxContext');
    $ajaxContext->addActionContext('clonerecursivegroup', 'html')->initContext();

    $id = $this->_getParam('id', null);

    $subform1 = new Zend_Form_SubForm();

    $Element1 = $subform1->createElement('text', 'text1');
    $Element1->setLabel('text1')->setRequired(true);
    $Element2 = $subform1->createElement('text', 'text2');
    $Element2->setLabel('text2')->setRequired(false);

    $subform1->addElement($Element1);
    $subform1->addElement($Element2);

    $this->view->field = $subform1->__toString();
}

Это почти работает.
Представление этого действия возвращает html-код SubForm, поэтому при успешном выполнении моего вызова ajax я просто отображаю его.

Проблема в том, что при отправке он проверяет форму, но теряет только что добавленную новую подчиненную форму. Этого не происходит в статье с одним элементом. Думаю, мне просто нужно добавить подформу к существующей форме, но как?

6
задан vascowhite 2 November 2012 в 10:36
поделиться