2009-08-31 8 views
1

J'ai un problème étrange: j'ai utilisé Zend Dojo et Zend Form dans le passé, mais sur mon projet le plus récent, Zend_Dojo refuse d'activer sauf si forcé dans la vue, et même alors, il n'importera pas les bibliothèques appropriées pour les dijits que j'utilise. Voici le code applicable:Pourquoi Zend_Dojo ne va-t-il pas activer/importer correctement?

Bootstrap.php:

protected function _initViewHelpers() { 
    $this->bootstrap('layout'); 

    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 

    $view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper'); 

    $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); 

    $viewRenderer->setView($view); 

    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); 

    $view->doctype('XHTML1_TRANSITIONAL'); 

    $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); 
    $view->headLink()->appendStylesheet('base.css'); 
} 

IndexController.php (extrait de quelques autres trucs sans rapport)

public function renderAction() { 
$this->_helper->layout->setLayout('render'); 
//SNIP 
if ($this->getRequest()->getParam("medialeadsource")) 
    { 
     $source = $this->getRequest()->getParam("medialeadsource"); 
     $mls = $this->sourceService->getSourceByURI($source); 
     $this->view->source = $mls; 
     $form = new App_forms_Sweepstakes($mls->__get('id'), $mls->__get('layout')); 

     $this->view->form = $form;   
     switch($mls->__get('template')) { 
      case '1': 
       $this->_helper->viewRenderer('template-1'); 
       break; 
      case '2': 
       $this->_helper->viewRenderer('template-2'); 
       break; 
      case '3': 
       $this->_helper->viewRenderer('template-3'); 
       break; 
      default: 
       $this->_helper->viewRenderer('template-1'); 
       break; 
     } 
     $this->view->test = $this->sourceService->isURISlideshow($source); 
     $this->view->subheadline = $mls->__get('subheadline'); 
     $this->view->body = $mls->__get('body'); 
     Zend_Dojo::enableView($this->view); 
     Zend_Dojo::enableForm($form); 
     Zend_Dojo_View_Helper_Dojo::setUseDeclarative(); 
//SNIP 
} 

Et à partir du modèle-1.phtml (la seule vue J'ai déjà configuré pour Dojo et notez que pour ces vues spécifiques, la mise en page elle-même est dépourvue de tout contenu et n'a donc pas d'impact sur les choses). Je ne y compris la partie applicable, encore une fois:

<?php 
     $this->dojo()->setDjConfigOption('usePlainJson',true) 
     ->addStylesheetModule('dijit.themes.tundra'); 
    echo $this->dojo(); 

?> 
</head> 
<body class="tundra"> 

Le code généré est la suivante:

<title>Test View Title</title> 
</head> 
<body class="tundra"> 

Alors, évidemment, rien ne se passe .. Si j'ajoute -> activer() au Dojo chaîne dans la vue, voici ce que je reçois:

<script type="text/javascript" src="primaryFunctions1.js"></script> 
<style type="text/css"> 
<!-- 
@import "http://ajax.googleapis.com/ajax/libs/dojo/1.2.0/dijit/themes/tundra/tundra.css"; 
--> 
</style> 
<script type="text/javascript"> 
//<![CDATA[ 
var djConfig = {"usePlainJson":true,"parseOnLoad":true}; 
//]]> 
</script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.2.0/dojo/dojo.xd.js"></script> 

<title></title> 
</head> 
<body class="tundra"> 

Donc toujours pas d'importations de dijit. Je suis à perte!

Répondre

1

Je pense que votre problème est lié au fait que les imports/require sont créés après le $ form-> render(). Vous pouvez généralement contourner ce problème en utilisant des scripts de mise en page. Cependant, de nos jours, j'ai parfois borderContainers et d'autres trucs de dojo même dans la mise en page me forçant à le mettre en dernier dans la doc.

Questions connexes