我正在尝试将JS文件插入到视图中,但它们的插入顺序错误。
在我的default.ctp中,我有这个
$this->Html->script(array(
'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
'global'
), array('inline'=>false));
echo $this->fetch('script');
在我看来,我有这个:
$this->Html->script('jquery.fancybox.pack', array('inline' => false));
但是当我查看源代码时,它就会出现:
<script type="text/javascript" src="/js/jquery.fancybox.pack.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="/js/global.js">
这显然是错误的顺序,因此jQuery插件无效。
我做错了什么?
答案 0 :(得分:6)
通常,我在布局中回显所需的脚本(而不是将它们添加到缓冲区中),然后在脚本块(缓冲的脚本)之后。这可确保首先回显每个视图所需的脚本。你的default.ctp看起来像这样:
// get echoed immediately
echo $this->Html->script(array(
'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
'global'
));
// everything else from the view, echoed after
echo $this->fetch('script');
或者,您可以为前面的脚本指定一个特殊块。
echo $this->Html->script(array(
'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
'global'
), array('block' => 'firstScripts');
echo $this->fetch('css');
echo $this->fetch('firstScripts');
echo $this->fetch('script');
答案 1 :(得分:2)
不确定您在构建当前系统上投入了多少时间,但您可以尝试使用hierarchical resource loader帮助程序,而不是标准的cakePHP帮助程序。
遗憾的是,标准资源加载器无法处理不同文件之间的依赖关系,只是按照您提供的顺序加载它们(在布局之前解析视图)。
答案 2 :(得分:0)
在头部使用此功能。
Html->script('jquery-1.11.1.js') ?>
fetch('script') ?>