如何在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,使用=
而不是奇怪地工作...