[英]Building a jquery plugin with dynamic loading of feature extensions
我正在尋找一種技術,以允許jquery插件或基於jquery的javascript庫根據自身在其中的當前環境自動向其自身添加擴展。 基本上,如果頁面上加載了其他插件,我希望能夠重用其他插件的某些有用功能。 如果我的插件檢測到未加載它們,那么我想加載自己的那些功能版本。
例如,我的插件需要日期解析和格式化功能。 一種流行的方法是使用DateJS的parse()和toString()。 但是DateJS是一個相當重量級的插件,我的插件不需要它所具有的功能。 其他插件也具有一些類似的功能,例如UI 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-dates.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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.