Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   AMD Подгрузка скриптов (RequireJS) (https://javascript.ru/forum/events/33765-amd-podgruzka-skriptov-requirejs.html)

Quieteroks 07.12.2012 13:23

AMD Подгрузка скриптов (RequireJS)
 
Здравствуйте.

Делаю по инструкции, вроде.
При подключении скрипта из:
<script type="text/javascript" data-main="?ajax=java&with=doc&type=b" src="js/require.js"/>


Этот скрипт подключается и выполняется.
А когда я подключаю новый скрипт из скрипта ajax подгрузки командой:
require([data.script]);


Он добавляет его в хедер, но не исполняет..

От сюда два вопроса:
- что и куда добавить, чтоб он не кэшировал скрипты в хедере страницы.
- как заставить выполнятся скрипт? Может конструкция jQuery(document).ready(function(){}); не нужна в подключаемых скриптах?

danik.js 07.12.2012 13:29

Цитата:

Сообщение от Quieteroks
Может конструкция jQuery(document).ready(function(){}); не нужна в подключаемых скриптах

Конечно же не нужна. А зачем?

Quieteroks 07.12.2012 13:33

danik.js,
На всякий случай.
Но кстати попробовал, не работает.

Подгрузка контента идет так же по ajax, может скрипт загружается раньше чем контент добавляется на страницу? Такое возможно?

Quieteroks 07.12.2012 14:16

Видимо может...
Частично решил проблему.

danik.js 07.12.2012 14:24

Почему не кэшировать скрипты? Они разве не статичные? Каждый раз содержимое разное?

Quieteroks 07.12.2012 14:31

danik.js,
Для каждой страницы разные. Просто чтоб он их исполнял, думал стоит их не кэшировать.

Но блин, чет странное происходит, колорбокс и тултип не хотят вешать свои события теперь на блоки.

Может какое то событие подскажите, чтоб после загрузки элемента на страницу можно было обработчик повесить. По клику незя, ибо только со второго раза срабатывает тогда. А если при наведении, то нужно как то повесить только один раз...

danik.js 07.12.2012 14:46

Если содержимое не меняется, то не нужно запрещать кэширование. Не у всех безлимитный интернет еще. Подгружаемые скрипты не должны содержать чета типа $(document).ready(..)! Они должны просто объявлять какие-то глобальные переменные (хотя это не совсем правильно с точки зрения requirejs). А навешивать события и тд нужно отдельным кодом в момент когда и скрипт загружен, и контент уже подгружен.

И повесить обработчик, который после исполнения удалится - тоже не проблема. Есть же el.removeEventListener('event', handler), а в jquery для этого даже отдельный метод есть - $(el).once() $(el).one(), блин, первый раз правильно же написал..

Quieteroks 07.12.2012 14:57

danik.js,
Так библиотеки все загружены при первой загрузке.
А подгружаю только слушателей. Которые через раз почему то срабатывают.
Сейчас делаю по такому алгоритму:
- Получает ответ с сервера
- Прячем старый контент
- Как только он ушел с экрана, меняем содержимое и начинаем анимацию отображения
- Только в этот момент идет загрузка слушателей

Просто не все слушатели могу через live навесить.
А может все таки стоит все слушатели через него повесить?

danik.js 07.12.2012 15:34

Если ты обработчики в отдельных файлах навешиваешь, то ты должен сделать возможным делать это когда тебе нужно. Объявляешь функцию типа addEventHandlers и вызываешь ее когда нужно. Честно говоря с requirejs толком то и не знаком, наверняка там есть специальные для этого средства. И наверное чтобы небыло утечек, нужно еще объявлять removeEventListeners и вызывать эту функцию перед удалением контента.

Quieteroks 07.12.2012 16:21

danik.js,
Всех слушателей с контента я удаляю в момент ухода из виду.
В любом случае, тогда всех слушателей загружать нужно сразу и вешать их опять таки по какому то алгоритму... Думал все это заменить на получение сразу подготовленных выражений со всеми слушателями.

В общем будем думать, как это сделать безболезненно для сайта и пользователя.


Часовой пояс GMT +3, время: 13:19.