jQuery, Поиск более разумного способа инициализации

Я ищу лучший способ управления глобальной инициализацией компонентов / плагинов / виджетов в большом проекте. В нем есть много компонентов на базе 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 плохо справляется с этой темой, поскольку все предлагают одно из двух:

  • jQuery .live () или .delegate () всеобъемлющее событие обработчики. Это просто страшно на фундаментальном уровне. .delegate () было бы не так уж плохо, но для этого требуется, чтобы плагин / виджет / элемент управления / что бы то ни было полностью управляемым событиями. Это наверняка сработает во многих случаях, но не в других. Это также делает очень сложным отслеживание и организацию кода. Я даже не буду вдаваться в .live () , для больших сложных сайтов всплытие событий происходит медленно, и когда вы соберете достаточно компонентов вместе, список запросов для сопоставления становится большим, делая каждый щелчок / фокус / какое бы событие ни происходило постепенно медленнее в целом для всей страницы.
  • Обходные действия, которые включают в себя плагины, такие как liveQuery , который, безусловно, очень классный плагин, но в первую очередь, кажется, был разработан для решения другой проблемы (проблема с новыми элементами, вносимыми ajax / dom), и по-прежнему будет постепенно замедляться с увеличением количества запросов, которые необходимо проверить.

Заключение

Там есть лучший способ, я знаю, что он должен быть. Я исчерпал весь свой гугл по этой теме и до сих пор не могу найти идеи / концепции / примеры / обсуждения, которые новее, чем jQuery 1.3.2, или с большой картиной в голове. В идеальном мире это не было бы проблемой, потому что каждый использовал бы интеллектуальные браузеры с современными стандартами и приличным движком javascript, а запросы .class не занимали бы эоны и эоны, но, к сожалению, это не то кейс.

Я ищу идеи о том, как с этим справиться, пройдя через множество SO-вопросов, похожих на этот, и много статей о различных методах jquery. Я чувствую, что, если информация есть там, она похоронена под множеством ложных срабатываний & " 101 лучший плагин jquery », которые появляются при любом поиске с jQuery. Я знаю , что кто-то попал в это затруднительное положение.

Идеи, ссылки, примеры, все приветствуется, просто должен быть лучший способ.

6
задан Aren 1 December 2011 в 19:35
поделиться