Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Автоматическая инициализация плагинов. (https://javascript.ru/forum/misc/40893-avtomaticheskaya-inicializaciya-plaginov.html)

FanAizu 23.08.2013 17:04

Автоматическая инициализация плагинов.
 
На странице есть множество динамически подгружаемых областей(то есть html блоки подгружаются с помощью ajax-а и вставляются в DOM). В этих блоках находятся куча разных элементов-плагинов, которые нужно инициализировать, например, находятся стандартные селекты, которые подменяются плагином, стилизующим их. Так вот, есетственно для одного селекта я могу вызывать иницилазиацию после вставки html-я в DOM, но что делать, если плагинов может быть куча и совершенно разных? То есть можно ли как-то сделать:
1) чтобы само отслеживалось, что в DOM были внесены изменения.
2) само определяло какие плагины есть и эти плагины инициализировались? Уверен, что такой механизм должен быть, кто-нибудь да уже придумал.
Заранее благодарю.

mishgun131 23.08.2013 17:22

Добрый день,

Есть событие DOMNodeInserted. Это чтобы отслеживать изменения в DOM и что либо делать. Но мне кажется тут проще будет реализовать callback для каждого плагина, по завершению ajax. Это если я правильно Вас понял.

Можете подробнее объяснить, что значит "например, находятся стандартные селекты(<select>?), которые подменяются плагином, стилизующим их"?

FanAizu 23.08.2013 17:43

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

nick_ 08.10.2013 15:26

Приведу свою реализацию, возможно не лучшее решение, но работает вполне нормально.

Я тоже в свое время озадачился таким вопросом, т.к. активно использую Ajax-ссылки, и разные UI плагины. В общей архитектуре используется технология MVC, и есть представления (Veiw-файлы) в которых собирается HTML. Так вот, в этот html я встраиваю специальные теги в которых указываю ту функцию которую нужно запустить, при желании ей можно передать пременные (селекторы, id и т.д.). После удачной подгрузки по Ajax, запускается функция, которая ищет такие теги и запускает функции инициализации в соответственно.

Пример:

скрытый тег на странице, который указывает, что именно запустить
<input class="initJS" type="hidden" value="initEditor();" />


После подгрузки страницы $.ajax запускается функиция, которая ищет на странице, что ей нужно запустить
$('input.initJS').each(function (index, element) {
        var fun = $(element).val();
        eval(fun);
    });
}


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