示例#1
0
 public function setJavascriptBuilder(HTML_QuickForm2_JavascriptBuilder $builder = null)
 {
     $this->_renderer->setJavascriptBuilder($builder);
     return $this;
 }
 /**
  * Renders the container using the given renderer
  *
  * Container will be output N + 1 times, where N are visible items and 1 is
  * the hidden prototype used by Javascript code to create new items.
  *
  * @param HTML_QuickForm2_Renderer $renderer renderer to use
  *
  * @return   HTML_QuickForm2_Renderer
  */
 public function render(HTML_QuickForm2_Renderer $renderer)
 {
     $backup = $this->backupChildAttributes(true, true);
     $hiddens = $renderer->getOption('group_hiddens');
     $jsBuilder = $renderer->getJavascriptBuilder();
     $evalBuilder = new HTML_QuickForm2_Container_Repeat_JavascriptBuilder();
     $renderer->setJavascriptBuilder($evalBuilder)->setOption('group_hiddens', false)->startContainer($this);
     // first, render a (hidden) prototype
     $this->getPrototype()->addClass('repeatItem repeatPrototype');
     $this->getPrototype()->render($renderer);
     $this->getPrototype()->removeClass('repeatPrototype');
     // restore original JS builder
     $evalBuilder->passLibraries($jsBuilder);
     $renderer->setJavascriptBuilder($jsBuilder);
     // next, render all available rows
     foreach ($this->getIndexes() as $index) {
         $this->replaceIndexTemplates($index, $backup);
         /* @var HTML_QuickForm2_Node $child */
         foreach ($this->getRecursiveIterator() as $child) {
             if (isset($this->childErrors[$hash = spl_object_hash($child)]) && isset($this->childErrors[$hash][$index])) {
                 $child->setError($this->childErrors[$hash][$index]);
             }
         }
         $this->getPrototype()->render($renderer);
     }
     $this->restoreChildAttributes($backup);
     // only add javascript if not frozen
     if (!$this->toggleFrozen()) {
         $jsBuilder->addLibrary('repeat', 'quickform-repeat.js');
         $jsBuilder->addElementJavascript($this->_generateInitScript($evalBuilder));
         $this->renderClientRules($jsBuilder);
     }
     $renderer->finishContainer($this);
     $renderer->setOption('group_hiddens', $hiddens);
     return $renderer;
 }