Я ищу лучший способ управления глобальной инициализацией компонентов / плагинов / виджетов в большом проекте. В нем есть много компонентов на базе jQuery, которые я хотел бы инициализировать быстро и эффективно, и после поиска в Интернете я действительно нашел только недальновидные примеры, которые реалистичны / эффективны только на небольших сайтах.
Я хочу найти умный и элегантный способ избавиться от этого:
$(function() { $('.widget-one').widgetOne(); });
$(function() { $('.widget-two').widgetTwo(); });
$(function() { $('.widget-three').widgetThree(); });
$(function() { $('.widget-four').widgetFour(); });
Теперь, прежде чем вы меня за это ударите, позвольте мне заявить, что я знаю, что в большинстве случаев (но не во всех) .widget-one
- плохой селектор, поскольку в старых браузерах он будет получать все элементы в dom и проверять наличие класса.
Проблема в том, что эти виджеты не разовые, и я могу не знать об их существовании заранее (создается в представлении веб-приложения, может быть, 2-3 раза на основе логики или цикла продуктов или чего-то еще) .
Итак, следующие решения отсутствуют:
$(function() { $('#WidgetOne').widgetOne(); });
и
...
Это не новая проблема, она существует с первого дня. Меня до сих пор сбивает с толку, насколько сложно решить эту проблему с помощью jQuery даже на этом уровне зрелости. Либо это, либо я упускаю что-то явно очевидное.
К сожалению, google-fu плохо справляется с этой темой, поскольку все предлагают одно из двух:
.live ()
или .delegate ()
всеобъемлющее событие обработчики. Это просто страшно на фундаментальном уровне. .delegate ()
было бы не так уж плохо, но для этого требуется, чтобы плагин / виджет / элемент управления / что бы то ни было полностью управляемым событиями. Это наверняка сработает во многих случаях, но не в других. Это также делает очень сложным отслеживание и организацию кода. Я даже не буду вдаваться в .live ()
, для больших сложных сайтов всплытие событий происходит медленно, и когда вы соберете достаточно компонентов вместе, список запросов для сопоставления становится большим, делая каждый щелчок / фокус / какое бы событие ни происходило постепенно медленнее в целом для всей страницы. Там есть лучший способ, я знаю, что он должен быть. Я исчерпал весь свой гугл по этой теме и до сих пор не могу найти идеи / концепции / примеры / обсуждения, которые новее, чем jQuery 1.3.2, или с большой картиной в голове. В идеальном мире это не было бы проблемой, потому что каждый использовал бы интеллектуальные браузеры с современными стандартами и приличным движком javascript, а запросы .class
не занимали бы эоны и эоны, но, к сожалению, это не то кейс.
Я ищу идеи о том, как с этим справиться, пройдя через множество SO-вопросов, похожих на этот, и много статей о различных методах jquery. Я чувствую, что, если информация есть там, она похоронена под множеством ложных срабатываний & " 101 лучший плагин jquery », которые появляются при любом поиске с jQuery. Я знаю , что кто-то попал в это затруднительное положение.
Идеи, ссылки, примеры, все приветствуется, просто должен быть лучший способ.