Я ищу лучший способ управления глобальной инициализацией компонента / плагина / виджета в большом проекте. В нем много компонентов на основе 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(); });
и
<span id="WidgetOne_12345">...</span>
<script type="javascript">
$(function() { $('#WidgetOne_12345').widgetOne(); });
</script>
Мысли
Это не новая проблема, она существует с первого дня. Я до сих пор сбиваю с толку, как это трудно решить с помощью jQuery даже на этом уровне зрелости. Либо это, либо я упускаю что-то явно очевидное.
К сожалению, google-fu плохо справляется с этой задачей, поскольку все предлагают одну из двух вещей:
- обработчики событий jQuery
.live()
или .delegate()
. Это просто страшно на фундаментальном уровне. .delegate()
не так уж и плохо, но для этого требуется, чтобы плагин / виджет / элемент управления / независимо от того был полностью управляем событиями. Это будет работать во многих случаях наверняка, но не в других. Это также усложняет отслеживание и организацию кода. Я даже не буду вдаваться в .live()
, для больших сложных сайтов всплывающее окно событий происходит медленно, и когда вы собираете достаточно компонентов вместе, список запросов для сопоставления становится большим, что делает каждое нажатие / фокус / любое событие постепенно медленнее в целом для всей страницы.
- Обходные решения, включающие плагины, такие как liveQuery , который, безусловно, является очень классным плагином, но в первую очередь кажется, что он предназначен для решения другой проблемы (проблема новых элементов, вносимых ajax / создание домена), и все равно будет постепенно увеличиваться по мере увеличения количества запросов, которые необходимо проверить.
Заключение
Там имеет , чтобы быть лучше, я знаю, что он должен быть. Я исчерпал свой гугл-фу по этому вопросу и до сих пор не могу найти идеи / концепции / примеры / обсуждения, которые являются более новыми, чем jQuery 1.3.2, или имеют в виду грандиозную картину. В идеальном мире это не было бы проблемой, потому что каждый использовал бы интеллектуальные браузеры с современными стандартами и приличным движком javascript, и .class
запросы не занимали бы эоны и эоны, но, к сожалению, это не так.
Я ищу идеи о том, как справиться с этим, после того, как я разобрался со многими SO-вопросами, похожими на эти, и во многих статьях по различным методам jquery, я чувствую, что если информация там, она скрыта под многими ложными срабатываниями & " 101 лучший плагин jquery ", результаты которого появляются в любом поиске с помощью jQuery. Я знаю, кто-то там столкнулся с этим затруднительным положением.
Идеи, ссылки, примеры, все приветствуется, просто должен быть лучший способ.