我试图理解为什么ZendX_JQuery在布局中直接使用时不能工作。在视图中,它运行得非常好:
但是当在布局中使用时
这能否被克服,以及如何克服?如果有人能回答这件事,它为什么要这么做?
为了清楚地说明这一点,我想做的是:
//layout.phtml file
<head>
<?php echo $this->jQuery();?>
</head>
<body>
<?php echo $this->ajaxLink("Like",
"/mod/instr/like/id/".$this->books['id'],
array('update' => '#ajaxed',
'beforeSend'=>'fadeout'
));
?>
<?php echo $this->layout()->content; ?>
</body这意味着,我希望在布局中放置一个jQuery对象。我想直接将一些与jQuery相关的代码放在我的布局文件中,而不仅仅是允许为需要它的视图初始化jQuery的部分。
编辑: Ok,下面是引导程序中的init函数
protected function _initJqueryLoad()
{
$view = new Zend_View();
// $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
$view->addHelperPath("ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper");
$view->jQuery()->addStylesheet('/js/jquery/css/ui-lightness/jquery-ui-1.7.2.custom.css')
->setLocalPath('/js/jquery/jquery.js')
->setUiLocalPath('/js/jquery/js/jquery-ui-1.7.2.custom.min.js');
ZendX_JQuery::enableView($view);
}我的布局文件在头中包含了以下内容:
<?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/admin.css'); ?>
<?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/form.css'); ?>
<?php
echo $this->headScript()->prependFile('/js/JP.js','text/javascript','');?>
<?php echo $this->jQuery(); ?>
</head>因此,应该在使用此布局的每个视图中启用JQuery。运行在视图中但不在布局中的代码是:
<div id="ajaxed">
<?
echo $this->ajaxLink("Like",
"/mod/instr/like/id/".$this->books['id'],
array('update' => '#ajaxed',
'beforeSend'=>'fadeout'
));
echo $this->ajaxLink("Don't like",
"/mod/instr/hate/id/".$this->books['id'],
array('update' => '#ajaxed'));?>
</div>发布于 2010-08-15 09:47:22
我在AJAXLINK也遇到了同样的问题。
链接是在布局中使用此助手生成的,但是JQUERY函数应该在头中执行AJAX调用。
如果我在视图中尝试同样的方法的话,一切都会很完美。
编辑:我最终在没有使用ajaxlink-助手的情况下手动地将ajax代码复制到布局中。
我在这里打开了一个bug报告:http://framework.zend.com/issues/browse/ZF-10317
发布于 2011-04-01 15:35:18
我发现,如果我在正文的末尾添加"echo $this->jQuery()“(即在ajax链接调用之后),它就能工作。基本上,问题是jquery助手在已经回显javascript之前不知道ajaxlink。
发布于 2010-07-20 16:11:00
最后编辑:我只是不明白这个问题。我可以在布局中很好地运行jquery代码(例如,我可以在layout.phtml中使用数据报警器)。而且你的ajaxLink也表现得很好。我从zendcast下载了示例代码,并将您的代码粘贴到布局中,并且运行正常。所以我不知道是什么不适合你,抱歉浪费了你的时间。
编辑:您是否尝试过添加
return $view;在你完蛋的时候。通常,它的bette rto将从引导中的init方法返回此值。也许这就是为什么似乎什么都没有装载。
您所做的应该是有效的,所以您的代码一定有错误。查看这个关于集成Zendx的伟大教程,他所做的正是您想要的。JQuery
还发布了一些代码,以便我们知道什么可能是错误的。
顺便说一下,您的代码中有一个错误(与jquery无关)。如果您查看生成的代码,应该会看到所有样式表都是双倍的。正确的语法是:
<?php $this->headLink()->prependStylesheet($this->baseUrl().'/css/admin.css'); ?>
<?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/form.css'); ?>或
<?php echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/admin.css')
->prependStylesheet($this->baseUrl().'/css/form.css'); ?>https://stackoverflow.com/questions/3289102
复制相似问题