JS скрипты после jQuery
-
- Сообщения: 47
- Зарегистрирован: 2011.03.02, 19:16
JS скрипты после jQuery
У меня на каждой страницы свой скрипт сейчас.
если в view юзаю $this->registerJsFile то скрипты становятся перед jQuery и не работают
bundle ставит все правильно
но писать bundle для каждой страницы тоже как то не камельфо (это приложение, у каждой страницы своя клиентская логика)
подскажите как подключить скрипт прямо на странице так чтобы он встал после jQuery
если в view юзаю $this->registerJsFile то скрипты становятся перед jQuery и не работают
bundle ставит все правильно
но писать bundle для каждой страницы тоже как то не камельфо (это приложение, у каждой страницы своя клиентская логика)
подскажите как подключить скрипт прямо на странице так чтобы он встал после jQuery
Re: JS скрипты после jQuery
Вызрать JQueryAsset перед $this->registerJsFile
Re: JS скрипты после jQuery
Можно в начале layout-а зарегистрировать jquery:
Тогда он будет подключаться на каждой странице.
Посмотрите https://github.com/yiisoft/yii2/blob/ma ... s/main.php
Код: Выделить всё
\yii\web\JqueryAsset::register($this);
Посмотрите https://github.com/yiisoft/yii2/blob/ma ... s/main.php
-
- Сообщения: 47
- Зарегистрирован: 2011.03.02, 19:16
Re: JS скрипты после jQuery
Код: Выделить всё
\yii\web\JqueryAsset::register($this);
что в layer что в view на порядок скриптов это ни как не влияет
Re: JS скрипты после jQuery
Тогда попробуйте указать $depends
Код: Выделить всё
$this->registerJsFile('index.js', ['yii\web\JqueryAsset']);
-
- Сообщения: 47
- Зарегистрирован: 2011.03.02, 19:16
Re: JS скрипты после jQuery
Код: Выделить всё
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);
}
position указывает в header или в конец body писать, по умолчинию в конец body.
Но один черт писать будет перед jQuery
так что тоже неработает
Последний раз редактировалось 3Dinterface 2014.02.03, 23:04, всего редактировалось 1 раз.
Re: JS скрипты после jQuery
параметр depends 100% как раз для этого (я проверял) - на лету ресурс в бандл преобразовывается с нужными зависимостями. depends добавлен был давно уже кстати.
-
- Сообщения: 47
- Зарегистрирован: 2011.03.02, 19:16
Re: JS скрипты после jQuery
Обновляюсь пока
спасибо за ценные советы.
спасибо за ценные советы.
Re: JS скрипты после jQuery
у меня вот как прокатило
Yii::$app->view->registerJsFile('/js/rooms-list.js', ['yii\web\JqueryAsset']);
Yii::$app->view->registerJsFile('/js/rooms-list.js', ['yii\web\JqueryAsset']);
Re: JS скрипты после jQuery
Присоединяюсь к вопросу. Столкнулся с той же проблемой.
Может я просто не смог найти решения но кажется что его просто не существует. Я создаю AssetBundle и мне потом на разных страницах надо цеплять доп скрипты, создавать для этого каждый раз еще один бандл это конечно решение, но далеко не всегда это удобно. Мне кажется должна быть возможность просто цеплять скрипты, которые теоретически подключаются уже после бандлов (ну по крайней мере я не встречал ситуации когда надо цеплять их перед)
Может я просто не смог найти решения но кажется что его просто не существует. Я создаю AssetBundle и мне потом на разных страницах надо цеплять доп скрипты, создавать для этого каждый раз еще один бандл это конечно решение, но далеко не всегда это удобно. Мне кажется должна быть возможность просто цеплять скрипты, которые теоретически подключаются уже после бандлов (ну по крайней мере я не встречал ситуации когда надо цеплять их перед)
Re: JS скрипты после jQuery
вам второй параметр зачем? on ready делайте
Re: JS скрипты после jQuery
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.
Re: JS скрипты после jQuery
Это вы говорите про registerJs() а этот метод не поддерживает подключение файла. Для файла есть registerJsFile() а он такой константы не имеет. Да и вообще это решение костыльное получается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.
- SpiritAbsolute
- Сообщения: 187
- Зарегистрирован: 2013.12.29, 18:20
- Откуда: Калининград
- Контактная информация:
Re: JS скрипты после jQuery
В одной теме, видел кто то писал вот такой вариант:
Код: Выделить всё
$this->registerJsFile('@app/assets/js/script.js', self::POS_READY);
Re: JS скрипты после jQuery
как не имеет? че вы чушь несете, читайте хоть мануал, прежде чем заявлять такое http://www.yiiframework.com/doc-2.0/yii ... %29-detailamarox писал(а):Это вы говорите про registerJs() а этот метод не поддерживает подключение файла. Для файла есть registerJsFile() а он такой константы не имеет. Да и вообще это решение костыльное получается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.
$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.
Re: JS скрипты после jQuery
SpiritAbsolute писал(а):В одной теме, видел кто то писал вот такой вариант:Код: Выделить всё
$this->registerJsFile('@app/assets/js/script.js', self::POS_READY);
Код: Выделить всё
$this->registerJsFile('@app/assets/js/script.js', [], ['position' => self::POS_READY]);
Re: JS скрипты после jQuery
registerJsFile не поддерживает POS_READY, это для registerJs который вставляет js код на страницу и оборачивает его в document.ready Файл так добавить вобщем-то нельзя
-
- Сообщения: 271
- Зарегистрирован: 2012.11.30, 07:33
Re: JS скрипты после jQuery
Код: Выделить всё
$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
Создайте базовый бандл со своими самыми основными функциями (которые используются везде). Примерно, как тут:
в этом случае jquery и yii.js, как депендант, будет подключен в <head>, перед включением ваших файлов.
Код: Выделить всё
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 ];
Сначала невидимое, затем видимое. И так у всех программистов :)