2010-05-19 97 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;