2016-01-06 3 views
3

У меня есть вопрос, как включить js-файл в последнюю позицию после включения файла jquery. beacuse, в чем проблема сейчас, это мой js-load, и после этого загружается файл jQuery. как прямо сейчас я добавил файл как:Yii2 - Как включить внешний файл js в файл в последней позиции

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 «s Javascript и/или CSS всегда приходят после того, как все, что включает в себя JQuery.

Использование AssetBundles также дает вам преимущество в том, что вы легко можете минимизировать/сжать свой код для использования в производстве.

+0

ответ выше @Sammaye также делает то же самое, что не нужно добавлять 'js' в файл активов и загружать его на каждую страницу, где он не требуется, вы можете добавить' 'depend" => "yii \ web \ JqueryAsset "' с параметром 'registerJsFile', и он будет загружаться после загрузки' jquery assets'. –

+0

Если вы добавите пакет активов в макет, он появится на каждой странице. Если вы добавите пакет активов в файл вида, он просто появится в этом представлении. Обычно в производственных системах все javascript (и css) объединяются вместе и сжимаются в 1 файл (для каждого). Хотя это может включать в себя все javascript на каждой странице, размер рабочего места намного меньше, и на сервере меньше запросов. AssetBundles помогают вам организовывать все это разными способами, не меняя ни одного из ваших файлов вида. AssetBundles - это рекомендуемый Yii способ сделать это. –

+0

Да, вы правы, но сжатие не ручное, а то, что я говорю, заключается в том, что вам не нужно добавлять один файл в пакет активов, чтобы добавить зависимость от 'jqueryAsset' или любого другого, что точка создания пакета активов для одного файла, который должен быть включен в один вид, и, очевидно, не имеет смысла его сжимать. вы все равно можете включить этот файл внутри представления и добавить зависимость от jquery-активов, хороший день –

Смежные вопросы