0

我在网上花了几个小时寻找解决方案,但没有任何效果。

我有一个分为 2 个子表单的表单(我无法让手风琴窗格工作)

像这样 :

$sfBase = new Zend_Dojo_Form_SubForm('base_info');
$sfBase->setName('base_info')
            ->setAction('/product/add?f=1');

$id = new Zend_Form_Element_Hidden('id');
$id->addFilter('Int')
      ->setAttrib('style', 'display:none');

$nom = new Zend_Dojo_Form_Element_TextBox('name');
$nom->setLabel('Nom du produit')
     ->setTrim(true)
     ->setValue("Entrez le nom")
     ->setPropercase(true);

$sdesc = new Zend_Dojo_Form_Element_TextBox('sdesc');
$sdesc->setLabel('Courte description du produit')
      ->setTrim(true)
      ->setValue("Description")
      ->setPropercase(true);

$sfBase->addElements(array($id, $nom, $sdesc);

$submitSubBase = new Zend_Dojo_Form_Element_SubmitButton('sub1');
$submitSubBase->setLabel('ok');
$sfBase->addElement($submitSubBase);

和另一个包含很少其他元素的子表单:

$sfComp = new Zend_Dojo_Form_SubForm('comp_info');
$sfComp->setName('comp_info')
       ->setAction('/product/add?f=2');
...
$submitSubComp = new Zend_Dojo_Form_Element_SubmitButton('sub2');
$submitSubComp->setLabel('envoyer');
$sfComp->addElement($submitSubComp);

$this->addSubForms(array('base_info' => $sfBase,
            'comp_info' => $sfComp
            ));

在我的控制器中,我显示了整个实例化形式:

$this->view->base = $form;

但每当我点击提交按钮时,什么都没有发生。我尝试将单个提交按钮添加到表单(而不是子表单)

与 setAction :

$baseForm->setAction($this->view->url(
            array('controller' => 'Product', 'action' => 'add', 'id' => '1'), 'default', 
            true));

但它是一样的,最后我把表单分成了两个不同的 Zend_Form 而不是子表单,但这不是很干净......

因此,在尝试多页表单、子表单和 dojo 容器失败后,我不知道该怎么做,欢迎任何帮助!

谢谢你

4

1 回答 1

1

我不知道这是否会有所帮助,但这是我的答案。

如果主窗体没有启用 Dojo,您是否在 init 方法中调用了 Zend_Dojo::enableForm()?MAIN 表单是从 Zend_Dojo_Form 扩展而来的吗?如果它从 Zend_Dojo_Form 扩展,那么您不必调用 Zend_Dojo::enableForm()。

Dojo 表单通过使用 javascript 提交。您应该在客户端有一些 javascript 可以处理来自服务器的响应,这些响应将返回。如果您在客户端没有 javascript 来处理这些返回,那么您将不会“看到”提交的结果。

试试这个,使用 dojo 工具包编写一些 javascript,当它从服务器接收到一些东西时,它会创建一个警告框。这样,如果您单击提交按钮并出现一个警告框,您就会知道该表单已提交。

于 2011-09-10T12:33:16.623 回答