Сброс всех скриптов при изменении страницы PJAX

Если у меня есть разные страницы, которые я извлекаю с помощью PJAX, сценарии, которые я использую на первой странице, сохраняются на второй, а также на любой странице, доступ к которой осуществляется после этого с помощью PJAX.

Я пытался сбросить функции и тому подобное, что слишком много работы. Возможно ли, что при изменении страницы PJAX я могу сбросить все привязки Javascript?

Возможен ли частичный постраничный Javascript? (например, сохранение jQuery при изменении страницы, но удаление других скриптов, предназначенных для каждой страницы)

Поскольку на файл Javascript можно ссылаться, просто добавив тег <script>, можно ли сделать обратное? (Я знаю, что удаление этого тега скрипта не удаляет скрипт)


person hexacyanide    schedule 31.01.2013    source источник
comment
Пожалуйста, не кодифицируйте не-код.   -  person Lightness Races in Orbit    schedule 31.01.2013
comment
Если вы хотите полностью сбросить страницу, что плохого в старой доброй гиперссылке?   -  person Lightness Races in Orbit    schedule 31.01.2013
comment
@LightnessRacesinOrbit Внешний фрейм страницы уже загружен, и Javascript во фрейме не нужно загружать снова. Поэтому я на самом деле не пытаюсь сбросить страницу, я хочу заменить внутренний фрейм HTML содержимым, а затем загрузить Javascript внутреннего фрейма вместе с содержимым, удаляя при этом следы предыдущего внутреннего фрейма.   -  person hexacyanide    schedule 31.01.2013
comment
В документации есть события выгрузки/загрузки страницы, но я не знаю, как полностью удалить сценарии файлов Javascript из браузера, кроме как просто перезаписать функции и отключить любые вещи, такие как setInterval.   -  person hexacyanide    schedule 31.01.2013


Ответы (1)


Ваши внутренние «фреймы» не должны содержать Javascript. Вы должны поместить весь свой Javascript в функции, доступные на самом верхнем уровне вашей страницы, а затем вы сможете подключиться к изменениям страницы, используя API PJAX для включения/отключения соответствующих функций.

person Lightness Races in Orbit    schedule 31.01.2013
comment
Я немного подумал об этом, и, похоже, это единственный практичный способ. Спасибо. - person hexacyanide; 31.01.2013
comment
Ну, это также лучший и самый чистый способ. :) - person Lightness Races in Orbit; 31.01.2013
comment
@LightnessRacesinOrbit Нужна ваша помощь. Нужно ли мне обслуживать все js для всех страниц при начальной загрузке страницы? Но что, если для каждой страницы существует свой код инициализации (привязка списка событий, инициализация плагинов и т.д.). Мне нужно будет определить текущую страницу, а затем запустить соответствующую функцию инициализации? - person shreyj; 10.11.2014
comment
Есть ли прогресс в этом? Занимаюсь точно такой же проблемой. У меня есть файлы js для каждой страницы. Эти файлы часто содержат привязки к кнопкам, которые могут встречаться на нескольких страницах, но функция каждый раз разная... Загрузка всего при начальной загрузке страницы приведет к поломке, И загрузка всего будет медленной...?! - person Brainfeeder; 09.09.2015
comment
@Brainfeeder: Зачем это ломать вещи? Ваш код не имеет правильного пространства имен? И это не будет медленным, потому что у вас уже есть один уменьшенный файл сценария для вашего веб-приложения, верно? Это похоже на 2 КБ, и его нужно загрузить только один раз, а затем кэшировать для всего вашего сайта. Это довольно быстро. - person Lightness Races in Orbit; 10.09.2015
comment
Весь общий код находится в одном файле.. Да.. Но это приложение представляет собой большое приложение для администрирования хостинговой компании. Например: #btn-edit-status имеет привязки к счетам, предложениям, заказам,...-страницам, но функция каждый раз немного отличается. Если я загружу все эти варианты сразу, все станет странно. - person Brainfeeder; 10.09.2015
comment
И да, я мог бы изменить название кнопок на что-то вроде #btn-edit-invoice-status и т. д. Но таким образом я не могу повторно использовать HTML-шаблон, как сейчас. - person Brainfeeder; 10.09.2015
comment
Если у вас могут быть такие конфликты, значит, вы сделали это неправильно :) Улучшите имена переменных и используйте области видимости. Вы знаете, что к элементам можно получить доступ согласно происхождению? например #some-parent #some-child - person Lightness Races in Orbit; 10.09.2015
comment
@LightnessRacesinOrbit Да, но это означало бы, что эти привязки остаются в памяти при загрузке другой страницы. Я предпочитаю повторно использовать их. jquery, загружаемый для каждой страницы в отдельных внешних файлах или связанный с кнопками действий, используемыми в таблице. И поэтому кажется, что я не единственный, у кого есть проблема с тем, как pjax обрабатывает недавно загруженные внешние скрипты. github.com/defunkt/jquery-pjax/issues/331 - person Brainfeeder; 11.09.2015
comment
@Brainfeeder: Все еще не вижу проблемы. Снимите привязки, если хотите. Не делай, если не хочешь. Здесь нет проблем. - person Lightness Races in Orbit; 11.09.2015
comment
@LightnessRacesinOrbit Возможно, мне следовало упомянуть, что это не родное приложение JavaScript. Это приложение на основе CodeIgniter. Обычно отдельные файлы сценариев смешиваются со встроенным сценарием. Иногда CodeIgniter даже внедряет JavaScript в зависимости от того, какой элемент формы был использован. В любом случае, я решил это с помощью форка pjax от команды разработчиков Yii. - person Brainfeeder; 11.09.2015