2010-05-19 5 views
0

J'ai une petite question sur l'ajout de Zend_Dojo_Form dans Zend_layouts.Zend_Dojo_Form ne s'affiche pas dans la présentation

J'ai une Zend_Dojo_Form que je veux afficher dans la mise en page utilisée pour un contrôleur particulier. Je peux ajouter le formulaire à la mise en page sans aucun problème, mais les éléments dojo ne parviennent pas à rendre, comme ils le feraient si j'ajoutais le formulaire à une vue standard.

Y a-t-il une raison pour que ce soit le cas? Ai-je besoin de faire quelque chose à la mise en page afin qu'elle active les composants pour ce formulaire intégré dans la mise en page. Tous les autres formulaires activés par dojo qui sont ajoutés dans la vue à l'aide de cette disposition fonctionnent correctement.

Ma forme est créée de la manière habituelle:

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, ....)); 

Dans le contrôleur, je déclare la mise en page et la forme dans la fonction 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; 

Dans ma mise en page Là où je veux la forme J'ai:

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

Pourquoi s'ajouter cette forme dans la mise en page ne parviennent pas à rendre/ajouter le Dojo élémen ts? Tout ce qui est actuellement affiché sont des zones de texte, plutôt que certains des autres composants tels que ComboBoxes/FilteringSelects etc ...

Merci d'avance.

Répondre

0

C'est ce que j'ai dans mon 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"> 

Dans mon bootstrap J'utilise

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'); 
} 

Maintenant, je peux appeler $ this-> forme à tout moment dans mes scripts de vue, et le Dojo rend correctement

Le problème que j'ai est que je ne peux pas cant Dojo de rendre une forme dans la fenêtre Modal

0

Je ne suis pas sûr à 100%, mais je pense que vous devez ajouter Dojo à votre application. Essayez

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

dans votre layout.phtml

+0

déjà sur la mise en page mais il ne parvient toujours pas à rendre cette forme particulière. Très étrange. –

0

Si vous utilisez Zend_Dojo_Forms dans votre mise en page assurez-vous de les rendre avant d'appeler

echo $ this-> dojo() ;

Vous pouvez le faire avec quelque chose comme ça:

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

//later... 
echo $content; 
Questions connexes