我遇到了一个奇怪的问题:过去我使用过Zend Dojo和Zend Form效果很好,但是在我最近的项目中,Zend_Dojo拒绝启用,除非被迫在视图中,即使这样也不会导入我正在使用的dijits的相应库。以下是适用的代码:
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(摘自其他一些不相关的东西)
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
}
来自template-1.phtml(迄今为止我为Dojo设置的唯一视图。另请注意,对于这些特定视图,布局本身没有任何内容,因此不会影响事项)。我只是再次包括适用的部分:
<?php
$this->dojo()->setDjConfigOption('usePlainJson',true)
->addStylesheetModule('dijit.themes.tundra');
echo $this->dojo();
?>
</head>
<body class="tundra">
生成的代码如下:
<title>Test View Title</title>
</head>
<body class="tundra">
很明显,没有任何事情发生..如果我在视图中添加 - &gt; enable()到dojo链,这就是我得到的:
<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">
所以仍然没有dijit进口。我不知所措!
答案 0 :(得分:1)
我认为您的问题与$ form-&gt; render()之后创建的进口/需求有关。你通常可以通过使用布局脚本解决这个问题。但是,现在我有时甚至在布局中有borderContainers和其他dojo的东西,迫使我把它放在doc中。