Pjax. Не срабатывает js из подключаемого Asset
Pjax. Не срабатывает js из подключаемого Asset
Hi
Немогу понять как так.
Делаю пошаговую регистрацию с применением Pjax.
На одном из шагов нужно выбрать страну и город , для этого использую js
js оформил в Asset и подключаю . Но когда загружается этот шаг с помощью Pjax, скрипт не срабатывает , но если на этом шаге обновить страницу F5 , то скрипт работает .
При этом если вставить js код в шаблон шага , то js срабатывает как надо и сразу, без принудительного обновления браузера.
Как сделать так что бы js из Asset подгружался/был активным ?
Спасибо !
Немогу понять как так.
Делаю пошаговую регистрацию с применением Pjax.
На одном из шагов нужно выбрать страну и город , для этого использую js
js оформил в Asset и подключаю . Но когда загружается этот шаг с помощью Pjax, скрипт не срабатывает , но если на этом шаге обновить страницу F5 , то скрипт работает .
При этом если вставить js код в шаблон шага , то js срабатывает как надо и сразу, без принудительного обновления браузера.
Как сделать так что бы js из Asset подгружался/был активным ?
Спасибо !
Re: Pjax. Не срабатывает js из подключаемого Asset
походу в кеше он, поэтому не грузит заново.
Посмотрите как там файлу js в ассете можно политкорректно добавить типа такого '?random=' . time()
Посмотрите как там файлу js в ассете можно политкорректно добавить типа такого '?random=' . time()
Re: Pjax. Не срабатывает js из подключаемого Asset
А регистрировать js именно на нужном шаге не вариант? И что именно в js происходит? Работа с dom-элементами?
- demimurych
- Сообщения: 20
- Зарегистрирован: 2016.06.27, 01:58
Re: Pjax. Не срабатывает js из подключаемого Asset
pjax загружает только то что обернуто внутри PJAX контейнера.
Если вы оформили ассет только для этой страницы, и эта страница загружается pjax-ом то никакие скрипты загружены специально для нее не будут. Об этом нужно заботиться самому.
При этом если вы сделаете релоад страницы то естественно все отработает как надо.
Пример:
у вас есть страница для которой вы офорили ассет с jquery и pjax
пользователь открыл эту страницу - загрузилось jquery и pjax плагин
у вас есть вторая страница, для которой вы создали отдельный asset подгружающий нужные именно для этой страницы скрипты.
пользователь с первой страницы переходит на вторую при этом вторая страница подгружается PJAX-ом. Ни один asset у вас для второй страницы загружен не будет.
Если вы оформили ассет только для этой страницы, и эта страница загружается pjax-ом то никакие скрипты загружены специально для нее не будут. Об этом нужно заботиться самому.
При этом если вы сделаете релоад страницы то естественно все отработает как надо.
Пример:
у вас есть страница для которой вы офорили ассет с jquery и pjax
пользователь открыл эту страницу - загрузилось jquery и pjax плагин
у вас есть вторая страница, для которой вы создали отдельный asset подгружающий нужные именно для этой страницы скрипты.
пользователь с первой страницы переходит на вторую при этом вторая страница подгружается PJAX-ом. Ни один asset у вас для второй страницы загружен не будет.
Re: Pjax. Не срабатывает js из подключаемого Asset
несколько версий назад pjax научился подгружать скрипты после pjax-запроса, возможно стоит обновиться.
- demimurych
- Сообщения: 20
- Зарегистрирован: 2016.06.27, 01:58
Re: Pjax. Не срабатывает js из подключаемого Asset
yii 2.0.11 pjax widget не имеет и намека кода на подгрузку js или любых других Js файлов.
сам по себе jquery pjax не обновлялся уже два года.
Будьте любезны покажите где именно в каком месте он научился подгружать?
Если вы о renderAjax то он никаким боком к pjax не относится.
Re: Pjax. Не срабатывает js из подключаемого Asset
это откуда такая информация?demimurych писал(а): ↑2017.04.02, 01:31yii 2.0.11 pjax widget не имеет и намека кода на подгрузку js или любых других Js файлов.
сам по себе jquery pjax не обновлялся уже два года.
вот https://github.com/yiisoft/jquery-pjax/ ... ax.js#L803 executeScriptTags выполняет скрипты в правильной последовательностиБудьте любезны покажите где именно в каком месте он научился подгружать?
Если вы о renderAjax то он никаким боком к pjax не относится.
- demimurych
- Сообщения: 20
- Зарегистрирован: 2016.06.27, 01:58
Re: Pjax. Не срабатывает js из подключаемого Asset
Вот отсюда, из основного репозитария Jquery pjax
https://github.com/defunkt/jquery-pjax
Посмотрите в реадме того же репозитария что Вы дали. Там одни баг фиксы.
Далее
Это код который выполняет скрипты которые были включены инлайнон в pjax контейнерpavlm писал(а): ↑2017.04.02, 02:14
вот https://github.com/yiisoft/jquery-pjax/ ... ax.js#L803 executeScriptTags выполняет скрипты в правильной последовательности
типа
<?php Pjax::begin() ?>
<script src="/js/myscript">
мой штмль код
<?php Pjax::end(); ?>
и никакого отношения к выполнению скриптов добавленных asset-тами к странице не имеет. Или любым другим registerJsFile.
Если Вы посмотрите в код PJAX виджета вы увидите, что никакого функционала подключения таких вещей там нет в принципе.
Re: Pjax. Не срабатывает js из подключаемого Asset
defunkt? не туда смотрите.demimurych писал(а): ↑2017.04.02, 02:24Вот отсюда, из основного репозитария Jquery pjax
https://github.com/defunkt/jquery-pjax
Посмотрите в реадме того же репозитария что Вы дали. Там одни баг фиксы.
ДалееЭто код который выполняет скрипты которые были включены инлайнон в pjax контейнерpavlm писал(а): ↑2017.04.02, 02:14
вот https://github.com/yiisoft/jquery-pjax/ ... ax.js#L803 executeScriptTags выполняет скрипты в правильной последовательности
типа
<?php Pjax::begin() ?>
<script src="/js/myscript">
мой штмль код
<?php Pjax::end(); ?>
и никакого отношения к выполнению скриптов добавленных asset-тами к странице не имеет. Или любым другим registerJsFile.
Если Вы посмотрите в код PJAX виджета вы увидите, что никакого функционала подключения таких вещей там нет в принципе.
Конечно, в самом виджете не найти подключения скриптов, но там есть вызов метода который это подключение делает.
У меня, например, работает подгрузка скриптов через ассеты, и вышеупомянутая js-функция гарантирует правильный порядок выполнения.
- demimurych
- Сообщения: 20
- Зарегистрирован: 2016.06.27, 01:58
Re: Pjax. Не срабатывает js из подключаемого Asset
Приехали.
По ссылке что Вы дали, идет репозиторий Jquery.Pjax плагина в YiiSoft ветке где черным по белому написано
forked from defunkt/jquery-pjax
Если открыть сам Js файл и посмотреть заголовок там черным по белому написано
https://github.com/defunkt/jquery-pjax
Если открыть ChangeLog форка можно увидеть, что все что менялось относительно ОСНОВНОГО репозитария это БАГФИКСЫ.
почему? потому что основной разработчик крайне медленно стал реагировать на критически важные баги. А сейчас и вовсе оставил проект без присмотра. Потому было принято решение форкнуть и внести исправления своими руками.
Приехали 2.
вы прежде чем говорить заглянули бы в код виджета
Код: Выделить всё
if ($this->requiresPjax()) {
ob_start();
ob_implicit_flush(false);
$view = $this->getView();
$view->clear();
$view->beginPage();
$view->head();
$view->beginBody();
if ($view->title !== null) {
echo Html::tag('title', Html::encode($view->title));
}
}
У вас работать ничего не могло, кроме одного _ЧАСТНОГО_ случая, если вы по ошибке подключение asseта сделали внутри PJAX контейнера. т.е. сделали что-то вроде
Код: Выделить всё
<?php Pjax::begin(); ?>
<?php AppAsset::register($this); ?>
<?php Pjax::end(); ?>
Как результат Ваш код корректно отрабатывал только для случаев отсутствия CSS в ассете в совокупности с корректной работы скриптов относительно меняющегося DOM. Поскольку повторная загрузка одного и того-же скрипта таким способом невозможна в силу специфики Jquery.PJAX плагина.
Смотрите чаще в исходный код, да не просто смотрите а разбирайтесь как он работает.
Re: Pjax. Не срабатывает js из подключаемого Asset
Это какой-то бессмысленный флуд.
Вот была ваша фраза:
Да, при этом надо регистрировать ассет внутри вызовов pjax (но это уже детали).
Какието ваши "ченджлоги, обрезка CSS, повторная загрузка скрипта... " это уже все дикий оффтопик.
Вот была ваша фраза:
Я написал, что это ложное утверждение, т.к. pjax может подгружать скрипты.demimurych писал(а): ↑2017.04.01, 16:44 Если вы оформили ассет только для этой страницы, и эта страница загружается pjax-ом то никакие скрипты загружены специально для нее не будут. Об этом нужно заботиться самому.
Да, при этом надо регистрировать ассет внутри вызовов pjax (но это уже детали).
Какието ваши "ченджлоги, обрезка CSS, повторная загрузка скрипта... " это уже все дикий оффтопик.
Re: Pjax. Не срабатывает js из подключаемого Asset
Да ничего там не резалось. CSS-ы обычно идут файлами и они все подключились при первой загрузке страницы и с тех пор работают, по аяксу их догружать нет потребности. А js подгружается т.к. надо стартовые скрипты перезапускать на новых элементах(полученных аяксом) - для форм, да и для GridView даже.demimurych писал(а): ↑2017.04.02, 07:56 сначала объявили старт работы виджета, а уже после его старта сделали инициализацию ассета. В результате чего вы получили ситуацию, когда вы на pjax реквест страницы загружали все ассеты вставленные в PJAX контейнер страницы. Причем у вас это работало ТОЛЬКО для JS части ассета. Все же CSS из вашего ассета благополучно резались.