为什么Zend_Dojo不能正确启用/导入?

时间:2009-08-31 17:32:00

标签: php zend-framework dojo

我遇到了一个奇怪的问题:过去我使用过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进口。我不知所措!

1 个答案:

答案 0 :(得分:1)

我认为您的问题与$ form-&gt; render()之后创建的进口/需求有关。你通常可以通过使用布局脚本解决这个问题。但是,现在我有时甚至在布局中有borderContainers和其他dojo的东西,迫使我把它放在doc中。