Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2012, 13:23
Интересующийся
Отправить личное сообщение для Quieteroks Посмотреть профиль Найти все сообщения от Quieteroks
 
Регистрация: 18.10.2012
Сообщений: 16

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(){}); не нужна в подключаемых скриптах?
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2012, 13:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Quieteroks
Может конструкция jQuery(document).ready(function(){}); не нужна в подключаемых скриптах
Конечно же не нужна. А зачем?
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2012, 13:33
Интересующийся
Отправить личное сообщение для Quieteroks Посмотреть профиль Найти все сообщения от Quieteroks
 
Регистрация: 18.10.2012
Сообщений: 16

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

Подгрузка контента идет так же по ajax, может скрипт загружается раньше чем контент добавляется на страницу? Такое возможно?
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2012, 14:16
Интересующийся
Отправить личное сообщение для Quieteroks Посмотреть профиль Найти все сообщения от Quieteroks
 
Регистрация: 18.10.2012
Сообщений: 16

Видимо может...
Частично решил проблему.
Ответить с цитированием
  #5 (permalink)  
Старый 07.12.2012, 14:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Почему не кэшировать скрипты? Они разве не статичные? Каждый раз содержимое разное?
Ответить с цитированием
  #6 (permalink)  
Старый 07.12.2012, 14:31
Интересующийся
Отправить личное сообщение для Quieteroks Посмотреть профиль Найти все сообщения от Quieteroks
 
Регистрация: 18.10.2012
Сообщений: 16

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

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

Может какое то событие подскажите, чтоб после загрузки элемента на страницу можно было обработчик повесить. По клику незя, ибо только со второго раза срабатывает тогда. А если при наведении, то нужно как то повесить только один раз...
Ответить с цитированием
  #7 (permalink)  
Старый 07.12.2012, 14:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

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

Последний раз редактировалось danik.js, 07.12.2012 в 14:50.
Ответить с цитированием
  #8 (permalink)  
Старый 07.12.2012, 14:57
Интересующийся
Отправить личное сообщение для Quieteroks Посмотреть профиль Найти все сообщения от Quieteroks
 
Регистрация: 18.10.2012
Сообщений: 16

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

Просто не все слушатели могу через live навесить.
А может все таки стоит все слушатели через него повесить?
Ответить с цитированием
  #9 (permalink)  
Старый 07.12.2012, 15:34
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Если ты обработчики в отдельных файлах навешиваешь, то ты должен сделать возможным делать это когда тебе нужно. Объявляешь функцию типа addEventHandlers и вызываешь ее когда нужно. Честно говоря с requirejs толком то и не знаком, наверняка там есть специальные для этого средства. И наверное чтобы небыло утечек, нужно еще объявлять removeEventListeners и вызывать эту функцию перед удалением контента.
Ответить с цитированием
  #10 (permalink)  
Старый 07.12.2012, 16:21
Интересующийся
Отправить личное сообщение для Quieteroks Посмотреть профиль Найти все сообщения от Quieteroks
 
Регистрация: 18.10.2012
Сообщений: 16

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подгрузка скриптов банеров из файла на сайт Monk Javascript под браузер 0 24.04.2011 03:16
Динамическая подзагрузка и исполнение скриптов NT Man Javascript под браузер 2 28.08.2009 12:32