2012-03-28 72 views
5

我想將JS文件插入到視圖中,但它們按錯誤的順序插入。

在我default.thtml中我有這個

$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插件無法正常工作。

我在做什麼錯?

回答

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'); 
+0

這是我剛開始的,但我真的很喜歡把所有的東西放到'$ this-> fetch('script');'因爲它確保所有的CSS都是先出現的,然後是所有的JS。不是一些CSS然後一些JS然後一些CSS等。 – 472084 2012-03-28 14:32:12

+0

不是在不同的塊中的CSS和腳本?無論如何你不能將它們分配給塊嗎? http://book.cakephp.org/2.0/en/views.html#using-blocks-for-script-and-css-files – jeremyharris 2012-03-28 14:54:35

+0

我的意思是,如果你在你的視圖中回顯內聯CSS,它會在JS下面在佈局,我試圖保持所有的CSS第一---塊確實工作得很好,但我遇到的問題是在視圖中添加的JS文件添加在佈局中的JS文件之前,所以你不能有jQuery在每個視圖中的佈局和特定的插件,因爲插件將在jQuery調用之上。 – 472084 2012-03-28 15:21:13

2

不知道你投入多少時間來構建你的當前系統,但你可以嘗試使用hierarchical resource loader幫手,而不是標準的CakePHP。

不幸的是,標準資源加載器無法處理不同文件之間的依賴關係,只是按照您提供的順序加載它們(在佈局之前解析該視圖)。

+0

謝謝,其它們的順序解析的恥辱,否則就不會存在這個問題。 – 472084 2012-03-28 09:39:26

0

在頭部使用此項。

Html->script('jquery-1.11.1.js') ?>
fetch('script') ?>