在不使用ZF MVC的情况下使用Zend Form和Dojo

时间:2011-06-20 12:36:12

标签: zend-framework dojo zend-form

对于我们的应用程序,我们使用Zend_form,而不使用ZF MVC堆栈的任何部分。我们想制作动态表单(Javascript,Ajax驱动),我们正在寻找Dojo,但它不能“开箱即用”。在线Zend Framework文档没有帮助,因为所有示例都讨论了MVC应用程序上的Zend_Form。

我们的错误在哪里?我们缺少什么?这是代码:

$oViewZF = new Zend_View();
Zend_Dojo::enableView($oViewZF);
$oViewZF->addHelperPath(PATH_ZF . '1.11.4/library/Zend/Dojo/View/Helper', 'Zend_Dojo_View_Helper');
$oViewZF->dojo()->setCdnVersion('1.1.1');
$oViewZF->dojo()->setLocalPath('dojo/dojo/dojo.js')->addStyleSheetModule('dijit.themes.tundra');

$form = new Zend_Dojo_Form();
$form->setAction($url)->setMethod('post')->setTranslator(self::ZendFormTranslate());
$form->addPrefixPath('Zend_Dojo_Form', 'Zend/Dojo/Form/')
       ->addElementPrefixPath('Zend_Dojo_Form', 'Zend/Dojo/Form/')
       ->addDisplayGroupPrefixPath('Zend_Dojo_Form', 'Zend/Dojo/Form/');
$form->setDecorators(array('FormElements', array('TabContainer', array('id' => 'tabContainer', 'style' =>
'width: 600px; height: 500px;', 'dijitParams' => array('tabPosition' => 'top'))), 'DijitForm'));

echo $oViewZF->headScript(); #show nothing
echo $oViewZF->dojo(); #print "style @import dojo/dijit/themes/tundra/tundra.css"; and <script type="text/javascript" src="dojo/dojo/dojo.js"></script>
echo $oViewZF->layout()->content; #show nothing
echo $oViewZF->inlineScript(); #show nothing

$birthday = new Zend_Dojo_Form_Element_DateTextBox('birthday');
$birthday->setLabel('Birthday');
$form->addElement($birthday);
$form->addElement('submit', 'cmd', array('label' => 'Créer'));
echo $form->render($oViewZF);

它只显示一个没有任何JS错误的文本输入字段:

<dt id="birthday-label"><label for="birthday" class="optional">Birthday</label></dt>
<dd><input id="birthday" name="birthday" value="" type="text"></dd>

我们希望使用日期选择器,仅在选中复选框时需要/可见字段,依此类推。

的问候,
塞德里克

ps:如果我在render()调用之后放置$ oViewZF-&gt; Dojo()(请参阅Zend_Dojo_Form in a layout),我有这个JS错误

  

Erreur:未捕获异常:[Exception ...“字符串包含无效字符”代码:“5”nsresult:“0x80530005(NS_ERROR_DOM_INVALID_CHARACTER_ERR)”位置:“http://127.0.0.1/~cedric/EC/VOOELFE/code/decideur/public/dojo/dojo/_base/_loader/bootstrap.js行:1930”]

1 个答案:

答案 0 :(得分:2)

好的,这是答案:

$oViewZF = new Zend_View();

Zend_Dojo::enableView($oViewZF);
$oViewZF->addHelperPath(CHEMIN_ZF . '1.11.4/library/Zend/Dojo/View/Helper', 'Zend_Dojo_View_Helper');
$oViewZF->dojo()->setLocalPath('dojo/dojo/dojo.js')->addStyleSheetModule('dijit.themes.tundra');

$form->addPrefixPath('Zend_Dojo_Form', 'Zend/Dojo/Form/') 
    ->addElementPrefixPath('Zend_Dojo_Form', 'Zend/Dojo/Form/') 
    ->addDisplayGroupPrefixPath('Zend_Dojo_Form', 'Zend/Dojo/Form/');

echo $form->render($oViewZF);
echo $oViewZF->dojo();
echo $oViewZF->inlineScript();

dojo()调用必须在render()调用之后,并且我的一个字段被严重声明并创建了JS错误。