2010-05-19 128 views
0

我有一个关于在Zend_layouts中添加Zend_Dojo_Form的快速问题。Zend_Dojo_Form不在布局中渲染

我有一个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, ....)); 

在控制器我宣布的布局,并在初始化函数形式:

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元素TS?所有当前显示的都是文本框,而不是其他组件,如ComboBoxes/FilteringSelects等等。

回答

0

这是我在我的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->随时在我的视图脚本中形成,并且Dojo呈现正确

我的问题是我不能着道场

0

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

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

在Layout.phtml

+0

这已经是在布局但它仍然无法做出这种特殊形式。很奇怪。 – 2010-05-21 10:33:20

0

如果您使用在布局Zend_Dojo_Forms务必使它们调用

回声$这个 - >道场之前渲染模式窗口形式() ;

你可以做到这一点这样的事情:

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

//later... 
echo $content;