Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2014, 22:42
Новичок на форуме
Отправить личное сообщение для Дмитрий Витальевич Посмотреть профиль Найти все сообщения от Дмитрий Витальевич
 
Регистрация: 02.04.2014
Сообщений: 6

Шапка и ноги сайта в одном файле - контент страницы в другом
Всем доброго времени суток. Пишу свой сайт с нуля, собираюсь сделать ajax навигацию на сайте посредством window.location.hash. Заметил, что если через jQuery грузить страницу не целиком, а только определённый блок посредством $('#content').load('url.html' + '#someblock', function() {}); то JAvascript'ы на такой странице не отрабатывают, их даже просто-напросто в коде страницы нет. А вот если грузить целиком, без выборки по селектору, то всё прекрасно отрабатывает. Поэтому прошу помочь более опчтных программистов помочь мне в решении данной проблемы. Сайт пишется на php + javascript. Всем заранее спасибо за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2014, 02:59
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Все элементарно Дмитрий витальевич. В твоем случае если ты используешь только jQuery то наверняка есть главная страница index.php c которой начинается загрузка. Пропиши вообще все скрипты которые тебе потребуются в index.php, а про возможность их подключений на других страницах вообще нафик забудь как страшный сон. Тогда и проблемы с подключением скриптов не будет.

Однако тут есть два момента.
1) необязательно просмотр сайта может начаться с index. Чтобы справится с этой задачей отдели layout от страниц на стороне сервера. Layout это в общем часть страницы вокруг контента это и header и footer и подключение скриптов и стилей. Страницы соответственно это огрызок с контентом но без стилей, скриптов, и каких то неизменяемых элементов вроде подвала. Фикус в том чтобы сервер отдающий страницу оборачивал страницы layout'ом. Так как layout один для всех страниц то будет обсолютно фиолетово с какой страницы пользователь начал просмотр сайта, все скрипты или стили один черт подтянутся. Чтобы понять что такое layout посмотри как она устроена в к примеру в YII.

2) Наверняка у тебя есть какой то скрипт который должен срабатывать при загрузке страницы. В этом случае тебе нужно написать
первое) контролер для каждой страницы в котором будут происходить все нужные тебе со страницей манипуляции а это скорее всего просто инициализация jQuery плагинов
второе) роутер который в зависимости от того какая страница была загружена будет передавать управление контролеру этой страницы, или хотябы вызывать какой то callback или поджигать кастомные события как jQuery.pJax.

В добавок ко всему можно сделать финт ушами и научить сервер отдавать страницу без layout если в запросе был передан ключ ?ajax=true. Тогда и страницу ненужно будет разбирать на стороне клиента, то есть сервер сам тебе отдаст только контент. Но это не обязательно делать, но это круто

P.S. Концепция лайоутов поддерживается почти всеми php фреймворками, шаблонизаторами и cms
P.P.S Большинство cms уже имеет возможность отключения лайоута специальным параметром.
P.P.P.S Роутер можно написать самому, использовать готовый jQuery плагин (рекомендую pJax ), или фреймворк вроде backbon (как один из самых простых)
P.P.P.P.S Решение с подгрузкой скриптов с подгруженных динамически страниц хоть и возможно но из всех возможных решений оно будет самым неуклюжим, ненадежным и сложным в реализации, так что обсуждать думаю лучше не будем.

Если тебе нужен именно сайт то для тебя проще всего заюзать именно jQuery pJax.(это в дополнение к лайоуту и прописыванию в нем всех скриптов и стилей )
Если же хотца пообучаться тонкостям js програмирования то пили роутер с нуля, в принципе ты уже начал это делать теперь дело за келбеком.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 04.06.2014 в 13:56.
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2014, 10:52
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

http://api.jquery.com/on/

В вашем случае навешивать события нужно не $('selector').on('event', handler), a $(parent).on('event', 'selector', handler);

Под parent может быть любой родительский элемент, в вашем случае можно использовать document.
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2014, 10:39
Новичок на форуме
Отправить личное сообщение для Дмитрий Витальевич Посмотреть профиль Найти все сообщения от Дмитрий Витальевич
 
Регистрация: 02.04.2014
Сообщений: 6

Всем спасибо за советы, но всё-таки пока я дожидался ответов, меня посетила одна мысль, и я сделал так:
Весь сайт у меня разделён на отображение и логику (нативный шаблонизатор). Я вычисляю, какой запрос был послан к скрипту через http_x_requested_with, если через xmlhttprequest, то я не подключаю в классе шаблонизатора шапку и низ сайта, а если нет, то наоборот. И согласно этому, когда я гружу страницу через $('#block').load(url); то скрипты отрабатыают нормально и сайт грузится далее уже без header и footer. Вроди нормальное решение, по крайней мере для новичка)) Сама навингация основана на хэшах, событие отлавливается через $(window).bind('hashchange'< function() {handler()'}); . Написал и обработчик ссылок $('a').live('click', function() {handler();}); Может какие будут поправки? Кстати, кнопки навигации (вперёд и назад) в браузере работают как надо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
background resize IceDvl jQuery 4 25.04.2014 17:54
Перемещение блока при скроллинге region029 Общие вопросы Javascript 10 16.06.2012 10:41
Условные операторы, document.referrer и контент страницы Ministr Общие вопросы Javascript 4 05.03.2012 15:33
Вывод страницы другого сайта denisnb Общие вопросы Javascript 3 31.03.2011 23:49
запомнить переменную js в одном файле и использовать в другом. как? skalka Общие вопросы Javascript 2 28.09.2010 08:19