Zend_Dojo_Form в макете - PullRequest
       25

Zend_Dojo_Form в макете

3 голосов
/ 30 сентября 2010

У меня есть Zend_Dojo_Form, который я переместил с моего вида (где он работает нормально) на свой макет, так как он будет полезен на каждой странице.Однако в макете форма больше не работает - ни один из элементов dijit не появляется, и он ведет себя так же, как и обычная форма HTML.

Вот соответствующая часть моей начальной загрузки:

protected function _initView()
{
    Zend_Layout::startMvc(array(
        'layoutPath' => '../application/layouts',
        'layout' => 'default'
    ));

    $view = new Zend_View();
    $view->setEncoding('UTF-8')
         ->doctype('HTML5');

    // init Dojo
    Zend_Dojo::enableView($view);
    $view->dojo()->enable()
                 ->setCdnVersion('1.5')
                 ->requireModule('dojo.data.ItemFileWriteStore')
                 [...]
                 ->addStyleSheetModule('dijit.themes.tundra');

    // assign the view to the viewRenderer, so it will be used by the MVC actions
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    $viewRenderer->setView($view);

    return $view;
}

нет ошибок (JS или ZF), форма просто не работает так, как должна.

Я предполагаю, что мне нужно, чтобы Dojo каким-то образом включил представление Layout.Я попытался изменить часть макета метода начальной загрузки выше:

$layout = Zend_Layout::startMvc(array(
    'layoutPath' => '../application/layouts',
    'layout' => 'default'
));
$view = $layout->getView();
Zend_Dojo::enableView($view);
$layout->setView($view);

, но это не имело никакого значения.

Я нашел этот вопрос , который звучиточень похоже на мою проблему, но принятый ответ только показывает, что в макете есть помощник додзё, который я уже делаю.

1 Ответ

4 голосов
/ 05 января 2011

Скорее всего, это связано с тем, что у вас есть макет, предложенный в документации:

  <?php echo $this->doctype() ?>
  <html>
  <head>
      <?php echo $this->headTitle() ?>
      <?php echo $this->headMeta() ?>
      <?php echo $this->headLink() ?>
      <?php echo $this->headStyle() ?>
  <?php if ($this->dojo()->isEnabled()){
      $this->dojo()->setLocalPath('/js/dojo/dojo.js')
                   ->addStyleSheetModule('dijit.themes.tundra');
      echo $this->dojo();
     }
  ?>
      <?php echo $this->headScript() ?>
  </head>
  <body class="tundra">
      <?php echo $this->layout()->content ?>
      <?php echo $this->inlineScript() ?>
  </body>
  </html>

Проблема в том, что echo $ this-> dojo () должно быть после $ this-> form-> render () , иначе необходимые модули не будут зарегистрированы в Zend_Dojo.

...