Динамические расширения плагинов
Я ищу методы, позволяющие плагину jquery или библиотеке javascript на основе jquery автоматически и динамически добавлять расширения к себе на основе текущей среды, в которой они находятся. По сути, я хочу иметь возможность повторно использовать некоторые полезные функции из других плагинов, если на страницу загружены другие плагины. Если мой плагин обнаружит, что они не загружены, я хочу загрузить собственную версию этих функций.
Например, моему плагину нужны функции разбора и форматирования даты. Один из популярных способов сделать это - использовать parse () и toString () DateJS . Но DateJS - довольно тяжелый плагин, и мой плагин не нуждается в каких-либо функциях, которые он имеет. Другие плагины имеют некоторые похожие функции, такие как DatePicker , FullCalendar и т. Д. Если какой-либо из этих плагинов используется на странице, я бы не стал загружать избыточный и избыточный код в моем плагине и просто используйте функции другого плагина вместо этого.
Итак, я хотел бы предоставить собственную упрощенную версию parse () и format () во внешнем файле из основного файла плагина. Если не используются никакие другие плагины, обеспечивающие необходимые функции parse () и format (), тогда основной файл плагина будет загружать мой плагин для расширения дат.
Если мой основной плагин обнаружит, что какой-либо из плагинов DateJS, UI DatePicker или FullCalendar загружен, то он загрузит для него простое расширение-обертку, которое обеспечит необходимые функции parse () и format (). Эти функции в основном просто вызывают функции синтаксического анализа и форматирования другого плагина.
Вопросы
- Как лучше всего определить функцию, чтобы определить, загружен ли плагин?
- Как мне динамически загрузить соответствующий дополнительный скрипт расширения?
- Как мне убедиться, что я не загружаю несколько расширений, переопределяя друг друга?
- Существуют ли другие плагины, которые расширяются? Я хотел бы изучить их, чтобы увидеть, как они это делают.
Подробный пример
Если это поможет лучше понять вопрос, я представляю такие файлы:
myplugin.js
myplugin-dates.js
myplugin-wrap-datejs.js
myplugin-wrap-datepicker.js
myplugin-wrap-fullcalendar.js
Файл myplugin.js будет выглядеть примерно так (обратите внимание, что это не настоящий плагин jquery, а скорее глобально зарегистрированная библиотека):
var MYPLUG = (function (parent, $) {
var MYPLUG = parent;
// Public functions
MYPLUG.doSomething = function(dateString) {
...
var date = MYPLUG.Dates.parse(dateString);
...
var prettyDate = MYPLUG.Dates.format(date);
...
};
return parent;
}(MYPLUG || {}, jQuery));
Файл myplugin-date.js будет выглядеть примерно так:
var MYPLUG = (function (parent, $) {
var Dates = parent.Dates = parent.Dates || {};
Dates.parse = function(dateString) {
// Custom code to parse dateString to a date
}
Dates.format = function(dateObj) {
// Custom code to format dateObj as a string
}
return parent;
}(MYPLUG || {}, jQuery));
Наконец, расширение для переноса плагинов myplugin-wrap-fullcalendar.js может выглядеть так:
var MYPLUG = (function (parent, $) {
var Dates = parent.Dates = parent.Dates || {};
Dates.parse = function(dateString) {
return $.fullCalendar.parseDate(dateString);
}
Dates.format = function(dateObj) {
return $.fullCalendar.formatDate(dateObj, "mm/dd/yy");
}
return parent;
}(MYPLUG || {}, jQuery));