2016-01-06 26 views
3

我有一些查詢,比如在jquery文件包含後如何將js文件包含在最後位置。問題現在的問題是我的js加載,然後加載我的jQuery文件。像像現在,我已經添加文件:Yii2 - 如何將視圖文件中的外部j包含在最後位置

use frontend\assets\AppAsset; 

AppAsset::register($this); 
$this->registerJsFile('@frontend_base/web/js/sendverification.js'); 

所以這將增加js文件而不是在最後一次。所以我怎麼能做到這一點?

回答

1

您可以定義JS文件的位置Register Js File

$this->registerJsFile('@frontend_base/web/js/sendverification.js',['position' => \yii\web\View::POS_END]); 
+1

不正確,你會看到這只是意味着身體結束而不是JS文件的末端 – Sammaye

+0

爲此,您可以創建AssetBundle並將其恰當地包含在'$ js []'末尾。 –

+0

這意味着包括整個其他文件和類等等等等,有點過頂 – Sammaye

1

實際上,你可以使你的腳本對jQuery的依賴。這是唯一的真正的方法,而無需使用包含圖案古怪,以確保這一點:

$this->registerJsFile('@frontend_base/web/js/sendverification.js', ['depends' => 'yii\web\JqueryAsset']) 

使用POS_常量只有確保JS被包括在網頁的某一部分,不經過一定的文件,並可以包括在該文件之前。

你可以在這裏閱讀更多:http://www.yiiframework.com/doc-2.0/yii-web-view.html#registerJsFile()-detail

+0

這是問題+1的正確答案。 –

0

推薦的解決方案是使用AssetBundles。喜歡的東西:

class SendverificationAsset extends AssetBundle { 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $js = [ 
     'js/sendverification.js' 
    ]; 
    public $depends = [ 
     'yii\web\JqueryAsset' 
    ]; 
} 

然後在您的視圖文件:

use frontend\assets\AppAsset; 
use frontend\assets\SendverificationAsset; 

AppAsset::register($this); 
SendverificationAsset::register($this); 

的依賴將確保SendverificationAsset的Javascript和/或CSS總是會後什麼jQuery包含。

使用AssetBundles還爲您提供了輕鬆縮減/壓縮代碼以供生產使用的優勢。

+0

@Sammaye上面的答案也做了同樣的事情,它不需要將js添加到資產文件,並使其在每個不需要的頁面上加載,您可以添加'「depends」=>「yii \ web \ jqueryAsset「'在'registerJsFile'參數中,它會在jquery assets被加載後加載。 –

+0

如果將資產捆綁包添加到佈局,它將出現在每個頁面上。如果將資產捆綁包添加到視圖文件中,它只會出現在該視圖中。通常在生產系統中,所有的javascript(和css)都捆綁在一起並壓縮成1個文件(每個文件)。雖然這可以包括每個頁面中的所有JavaScript,但佔用空間要小得多,並且服務器上的請求數量較少。 AssetBundles幫助您以多種不同的方式組織所有這些,而無需更改任何視圖文件。 AssetBundles是Yii推薦的方式。 –

+0

是的,你是對的,但壓縮手工不是assetbundle,說出來的話是,你不必一個文件添加到資產包,以增加對'jqueryAsset'或任何其他的依賴性,什麼是爲單個文件創建一個文件的資產綁定點,並且顯然沒有任何壓縮點。您仍然可以將該文件包含在視圖中,並在jQuery資產中添加依賴關係 –

相關問題