2011-09-08 65 views
0

我花了几个小时在网上找到解决方案,但没有任何工作。如何提交Zend Dojo子表单

我有一个表格分为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代替子表单但这不是很干净...

所以尝试了多页形式,subForms和dojo容器失败我不知道该怎么做,并且欢迎任何帮助!

谢谢

回答

1

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

如果主表单不是启用Dojo,你有没有在init方法中调用Zend_Dojo :: enableForm()?主表单是否扩展Zend_Dojo_Form?如果它从Zend_Dojo_Form扩展,那么你不必调用Zend_Dojo :: enableForm()。

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

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