如何在Layouts中启用ZendX集成Jquery

我试图理解为什么ZendX_JQuery在布局中直接使用时不起作用。 在视图中它完美正常:

  • 创建所需的代码
  • 将JQuery脚本放在head标签中

但是在布局中使用时

  • 创建所需的代码
  • 不会在head标记中插入JQuery脚本

这可以克服,怎么样? 而且,如果有人能回答这个问题,为什么要这样做呢?

为了使它清楚,这是我想要做的:

//layout.phtml file  jQuery();?>   ajaxLink("Like", "/mod/instr/like/id/".$this->books['id'], array('update' => '#ajaxed', 'beforeSend'=>'fadeout' )); ?> layout()->content; ?> </body 

这意味着,我希望在布局中放置一个jQuery对象。 我想在我的布局文件中直接放置一些与jQuery相关的代码,而不仅仅是允许jQuery为需要它的视图初始化的部分。

编辑:好的,所以这里是Bootstrap中的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); } 

我的布局文件包含在头部:

  headLink()->prependStylesheet($this->baseUrl().'/css/admin.css'); ?> headLink()->prependStylesheet($this->baseUrl().'/css/form.css'); ?> headScript()->prependFile('/js/JP.js','text/javascript','');?> jQuery(); ?>  

因此,应该在使用此布局的每个视图中启用JQuery。 在我的视图中运行但在我的布局中运行的代码是:

 
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'));?>

我遇到了与AJAXLINK相同的问题。

链接是在LAYOUT中使用此帮助程序生成的,但是JQUERY函数应该在标头NOT中执行AJAX调用。

如果我在VIEW中尝试相同,它的工作完美。

编辑:我最终手动将ajax代码复制到布局中,而不使用ajaxlink-helper。

我在这里打开了一个错误报告: http : //framework.zend.com/issues/browse/ZF-10317

我发现如果我在我的身体末尾添加“echo $ this-> jQuery()”(即在ajax链接调用之后)它可以工作。 基本上,问题是jquery帮助器在它已经回显了javascript之前不知道ajaxlink。

最后编辑:我只是不明白这个问题。 我可以在我的布局中运行jquery代码(例如我可以在layout.phtml中使用datepicker)。 你的ajaxLink出现就好了。 我从zendcast下载了exemple代码并将代码粘贴在布局中并且工作正常。 所以我不知道那是什么不适合你抱歉丢失你的时间。

编辑:你试过添加一个

 return $view; 

在你的init结束时。 通常它会更好地从bootstrap中的init方法返回它。 也许这就是为什么nothign似乎加载。

你正在做什么应该工作,所以你的代码必须有一些错误。 查看这个关于集成Zendx Jquery的精彩教程,他确实很喜欢你想要的东西。 Zendcast:使用ZendX_JQuery

还发布一些代码,以便我们知道可能出错的地方。

顺便说一句,你的代码中有一个错误(与jquery的东西无关)。 如果你查看生成的代码,你应该看到所有样式表的双倍,你回显两次headlink。 正确的语法是:

 headLink()->prependStylesheet($this->baseUrl().'/css/admin.css'); ?> headLink()->prependStylesheet($this->baseUrl().'/css/form.css'); ?> 

要么

 headLink()->prependStylesheet($this->baseUrl().'/css/admin.css') ->prependStylesheet($this->baseUrl().'/css/form.css'); ?> 

我有同样的问题。 我把ZendX Form放在bootstrap中解决了。 这适用于任何其他ZendX元素。 将任何ZendX相关的东西放在layout.phtml文件中的问题是,当你到达你的代码时,$ this-> jQuery(); 已经执行了,你运气不好。

我的例子与在layout.phtml中回显的占位符中使用ZendX有关。 我在搜索视图中使用了完全相同的代码,但代码工作正常。 这让我抓狂!

 //Bootstrap.php protected function _initSearchBox(){ $this->bootstrap('View'); $view = $this->getResource('view'); $searchForm = Search_From_Find::tinyFindForm(); //contains autocomplete textbox and submit button $view->placeholder('sidebarright')->prepend($searchForm); return $view; } //layout.phtml  //... normal jquery and other head stuff ...   //... normal body stuff like 'echo $this->layout->content();' ... echo $this->placeholder('sidebarright');  

我希望这可以帮助别人!

编辑:我也听说过,但没有亲自validation,使用而不是奇怪地工作...