JS скрипты после jQuery

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
3Dinterface
Сообщения: 47
Зарегистрирован: 2011.03.02, 19:16

JS скрипты после jQuery

Сообщение 3Dinterface »

У меня на каждой страницы свой скрипт сейчас.

если в view юзаю $this->registerJsFile то скрипты становятся перед jQuery и не работают

bundle ставит все правильно
но писать bundle для каждой страницы тоже как то не камельфо (это приложение, у каждой страницы своя клиентская логика)

подскажите как подключить скрипт прямо на странице так чтобы он встал после jQuery
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: JS скрипты после jQuery

Сообщение futbolim »

Вызрать JQueryAsset перед $this->registerJsFile
Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: JS скрипты после jQuery

Сообщение KiTE »

Можно в начале layout-а зарегистрировать jquery:

Код: Выделить всё

\yii\web\JqueryAsset::register($this);
Тогда он будет подключаться на каждой странице.
Посмотрите https://github.com/yiisoft/yii2/blob/ma ... s/main.php
3Dinterface
Сообщения: 47
Зарегистрирован: 2011.03.02, 19:16

Re: JS скрипты после jQuery

Сообщение 3Dinterface »

Код: Выделить всё

\yii\web\JqueryAsset::register($this); 
Неа, нефурычит
что в layer что в view на порядок скриптов это ни как не влияет
Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: JS скрипты после jQuery

Сообщение KiTE »

Тогда попробуйте указать $depends

Код: Выделить всё

$this->registerJsFile('index.js', ['yii\web\JqueryAsset']); 
3Dinterface
Сообщения: 47
Зарегистрирован: 2011.03.02, 19:16

Re: JS скрипты после jQuery

Сообщение 3Dinterface »

Код: Выделить всё

public function registerJsFile($url, $options = [], $key = null)
    {
        $position = isset($options['position']) ? $options['position'] : self::POS_END;
        unset($options['position']);
        $key = $key ?: $url;
        $this->jsFiles[$position][$key] = Html::jsFile($url, $options);
    }
В исходниках yii2\web\view.php этот метод только position в $options = [] принимает
position указывает в header или в конец body писать, по умолчинию в конец body.
Но один черт писать будет перед jQuery

так что тоже неработает
Последний раз редактировалось 3Dinterface 2014.02.03, 23:04, всего редактировалось 1 раз.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: JS скрипты после jQuery

Сообщение maleks »

параметр depends 100% как раз для этого (я проверял) - на лету ресурс в бандл преобразовывается с нужными зависимостями. depends добавлен был давно уже кстати.
3Dinterface
Сообщения: 47
Зарегистрирован: 2011.03.02, 19:16

Re: JS скрипты после jQuery

Сообщение 3Dinterface »

Обновляюсь пока :mrgreen:
спасибо за ценные советы.
poohbinar
Сообщения: 28
Зарегистрирован: 2012.12.26, 16:58

Re: JS скрипты после jQuery

Сообщение poohbinar »

у меня вот как прокатило
Yii::$app->view->registerJsFile('/js/rooms-list.js', ['yii\web\JqueryAsset']);
amarox
Сообщения: 78
Зарегистрирован: 2012.03.19, 21:03

Re: JS скрипты после jQuery

Сообщение amarox »

Присоединяюсь к вопросу. Столкнулся с той же проблемой.
Может я просто не смог найти решения но кажется что его просто не существует. Я создаю AssetBundle и мне потом на разных страницах надо цеплять доп скрипты, создавать для этого каждый раз еще один бандл это конечно решение, но далеко не всегда это удобно. Мне кажется должна быть возможность просто цеплять скрипты, которые теоретически подключаются уже после бандлов (ну по крайней мере я не встречал ситуации когда надо цеплять их перед)
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: JS скрипты после jQuery

Сообщение lynicidn »

вам второй параметр зачем? on ready делайте
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: JS скрипты после jQuery

Сообщение lynicidn »

http://www.yiiframework.com/doc-2.0/yii ... %29-detail
$position integer

The position at which the JS script tag should be inserted in a page. The possible values are:

POS_HEAD: in the head section
POS_BEGIN: at the beginning of the body section
POS_END: at the end of the body section
POS_LOAD: enclosed within jQuery(window).load(). Note that by using this position, the method will automatically register the jQuery js file.
POS_READY: enclosed within jQuery(document).ready(). This is the default value. Note that by using this position, the method will automatically register the jQuery js file.
amarox
Сообщения: 78
Зарегистрирован: 2012.03.19, 21:03

Re: JS скрипты после jQuery

Сообщение amarox »

lynicidn писал(а):http://www.yiiframework.com/doc-2.0/yii ... %29-detail
$position integer

The position at which the JS script tag should be inserted in a page. The possible values are:

POS_HEAD: in the head section
POS_BEGIN: at the beginning of the body section
POS_END: at the end of the body section
POS_LOAD: enclosed within jQuery(window).load(). Note that by using this position, the method will automatically register the jQuery js file.
POS_READY: enclosed within jQuery(document).ready(). This is the default value. Note that by using this position, the method will automatically register the jQuery js file.
Это вы говорите про registerJs() а этот метод не поддерживает подключение файла. Для файла есть registerJsFile() а он такой константы не имеет. Да и вообще это решение костыльное получается
Аватара пользователя
SpiritAbsolute
Сообщения: 187
Зарегистрирован: 2013.12.29, 18:20
Откуда: Калининград
Контактная информация:

Re: JS скрипты после jQuery

Сообщение SpiritAbsolute »

В одной теме, видел кто то писал вот такой вариант:

Код: Выделить всё

$this->registerJsFile('@app/assets/js/script.js', self::POS_READY);
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: JS скрипты после jQuery

Сообщение lynicidn »

amarox писал(а):
lynicidn писал(а):http://www.yiiframework.com/doc-2.0/yii ... %29-detail
$position integer

The position at which the JS script tag should be inserted in a page. The possible values are:

POS_HEAD: in the head section
POS_BEGIN: at the beginning of the body section
POS_END: at the end of the body section
POS_LOAD: enclosed within jQuery(window).load(). Note that by using this position, the method will automatically register the jQuery js file.
POS_READY: enclosed within jQuery(document).ready(). This is the default value. Note that by using this position, the method will automatically register the jQuery js file.
Это вы говорите про registerJs() а этот метод не поддерживает подключение файла. Для файла есть registerJsFile() а он такой константы не имеет. Да и вообще это решение костыльное получается
как не имеет? че вы чушь несете, читайте хоть мануал, прежде чем заявлять такое http://www.yiiframework.com/doc-2.0/yii ... %29-detail
$options array

The HTML attributes for the script tag. A special option named "position" is supported which specifies where the JS script tag should be inserted in a page. The possible values of "position" are:

POS_HEAD: in the head section
POS_BEGIN: at the beginning of the body section
POS_END: at the end of the body section. This is the default value.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: JS скрипты после jQuery

Сообщение lynicidn »

SpiritAbsolute писал(а):В одной теме, видел кто то писал вот такой вариант:

Код: Выделить всё

$this->registerJsFile('@app/assets/js/script.js', self::POS_READY); 

Код: Выделить всё

$this->registerJsFile('@app/assets/js/script.js', [], ['position' => self::POS_READY]);
amarox
Сообщения: 78
Зарегистрирован: 2012.03.19, 21:03

Re: JS скрипты после jQuery

Сообщение amarox »

registerJsFile не поддерживает POS_READY, это для registerJs который вставляет js код на страницу и оборачивает его в document.ready Файл так добавить вобщем-то нельзя
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: JS скрипты после jQuery

Сообщение Vespertilio »

Код: Выделить всё

$this->registerCssFile('css/bootstrap-datetimepicker.css');
$this->registerJsFile('js/moment.js', ['yii\web\JqueryAsset']);
$this->registerJsFile('js/bootstrap-datetimepicker.min.js', ['yii\web\JqueryAsset']);
$this->registerJsFile('js/locales/bootstrap-datetimepicker.ru.js', ['yii\web\JqueryAsset']); 
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: JS скрипты после jQuery

Сообщение Stepan Selyuk »

Создайте базовый бандл со своими самыми основными функциями (которые используются везде). Примерно, как тут:

Код: Выделить всё

class BaseAsset extends AssetBundle
{

    public $sourcePath = '@resources'; // @app/resources

    public $css = [ ];

    public $js = [ ];

    public $depends = [
        'yii\web\YiiAsset',
    ];

    public $jsOptions = [ 'position' => \yii\web\View::POS_HEAD ];
в этом случае jquery и yii.js, как депендант, будет подключен в <head>, перед включением ваших файлов.
Сначала невидимое, затем видимое. И так у всех программистов :)
Ответить