【问题标题】:Zend_Dojo_Form not rendering in layoutZend_Dojo_Form 不在布局中呈现
【发布时间】:2010-05-19 21:07:33
【问题描述】:

我有一个关于将 Zend_Dojo_Form 添加到 Zend_layouts 的快速问题。

我有一个 Zend_Dojo_Form,我想在用于特定控制器的布局中显示它。我可以毫无问题地将表单添加到布局中,但是 dojo 元素无法呈现,就像我将表单添加到标准视图中一样。

有什么理由会出现这种情况吗?我是否需要对布局做一些事情,以便在布局中启用此嵌入表单的组件。使用此布局添加到视图中的任何其他启用了 dojo 的表单都可以正常工作。

我的表单以通常的方式创建:

class QuickAddJobForm extends Zend_Dojo_Form{


public function init(){

    $this->setName('quickaddjobfrm')
        ->setMethod('post')
        ->setAction('/addjob/start/);


    /*We now create the elements*/
    $jobTitle = new Zend_Dojo_Form_Element_TextBox('jobtitle',
        array(
            'trim' => true              
        )
    );
    $jobTitle->setAttrib('style', 'width:200px;')
        ->addFilter('StripTags')
        ->removeDecorator('DtDdWrapper')
        ->removeDecorator('HtmlTag')
        ->removeDecorator('Label');

      ....
  $this->addElements(array($jobTitle, ....));

在控制器中,我在 init 函数中声明布局和表单:

 public function init(){
   $this->_helper->layout->setLayout('add-layout');
   $form = new QuickAddJobForm();
   $form->setDecorators(array(array('ViewScript', array('viewScript' => 'quickAddJobFormDecorator.phtml'))));

 $this->_helper->layout()->quickaddjob = $form;

在我的布局中,我想要我拥有的表单:

  echo $this->layout()->quickaddjob;

为什么在布局中添加此表单无法渲染/添加 Dojo 元素?当前显示的只是文本框,而不是其他一些组件,例如 ComboBoxes/FilteringSelects 等...

提前致谢。

【问题讨论】:

    标签: zend-framework dojo zend-form


    【解决方案1】:

    这就是我的 layout.phtml 中的内容

    <head>
    
        <style type="text/css" media="screen">
            @import url("<?= Zend_Controller_Front::getInstance()->getBaseUrl() ?>/includes/js/dojo/dijit/themes/tundra/tundra.css");
    
    <?php
    $this->dojo()->enable();
        if ($this->dojo()->isEnabled()) {
            $this->dojo()->setLocalPath($this->baseUrl() .  '/includes/js/dojo/dojo/dojo.js');
            echo $this->dojo();
        }
    ?>
    </head>
    <body class="tundra">
    

    在我的引导程序中我使用

        protected function _initDojo()
    {
        $this->bootstrap('frontController');
        $this->bootstrap('view');
        $view = $this->getResource('view');
    
        $appConfig = Zend_Controller_Front::getInstance()->getParam('appconfig');
        Zend_Dojo::enableView($view);
        Zend_Dojo_View_Helper_Dojo::setUseDeclarative();
        $view->dojo()->setLocalPath(Zend_Controller_Front::getInstance()->getBaseUrl() . '/includes/js/dojo/dojo/dojo.js')
        ->addLayer(Zend_Controller_Front::getInstance()->getBaseUrl() . '/includes/js/dojo/dojo/nirvanaDojo.js')
        ->requireModule('dijit.TitlePane')
        ->requireModule('dijit.InlineEditBox')
        ->requireModule('dijit.ProgressBar')
        ->requireModule('dijit.form.DateTextBox')
        ->addStyleSheetModule('dijit.themes.tundra');
    }
    

    现在我可以在我的视图脚本中随时调用 $this->form,并且 Dojo 可以正确呈现

    我遇到的问题是我无法在 Dojo 中呈现模态窗口中的表单

    【讨论】:

      【解决方案2】:

      我不是 100% 确定,但我认为您必须将 Dojo 添加到您的应用程序中。试试

       $this->dojo()->enable(); 
       echo $this->dojo(); 
      

      在您的 Layout.phtml 中

      【讨论】:

      • 这已经在布局中但是它仍然无法呈现这个特定的表单。很奇怪。
      【解决方案3】:

      如果您在布局中使用 Zend_Dojo_Forms,请确保在调用之前渲染它们

      echo $this->dojo();

      你可以这样做:

      //in HTML-Head:
      $content = $form->render();
      echo $this->dojo();
      
      //later...
      echo $content;
      

      【讨论】:

        猜你喜欢
        • 2011-04-19
        • 2016-11-16
        • 2017-07-07
        • 2013-02-13
        • 1970-01-01
        • 2014-09-07
        • 2023-04-06
        • 2012-12-31
        • 2021-10-26
        相关资源
        最近更新 更多