У меня есть основной плагин, написанный в соответствии с jQuery-руководством .Этот плагин реализует некоторые основные функции для ul
элементов (activate
, deactivate
и search
).
jquery.myplugin.core.js
(function($) {
var methods = {
init : function(opts){
var options = $.extend({}, $.fn.list.defaults, opts);
return this.each(function(i) {
...
methods.search("my search query"));
});
},
deactivate : function(){ ... },
activate : function(){ ... },
search : function(query){ ... },
};
$.fn.list = function(method){
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.list' );
}
};
$.fn.list.defaults = {...};
})(jQuery);
У меня в приложении множество списков, каждый из которых выполняет разные действия - некоторые функции обмена.Например;два списка можно считать удаляемыми , так что элементы могут быть удалены из них.Есть ли способ написать эти дополнительные наборы функций как миксины или расширенные плагины основного плагина?
Так что я бы хотел:
- jquery.myplugin.core.js
- jquery.myplugin.editable.js
- jquery.myplugin.deletable.js
- ...
Я посмотрел BestСпособ расширения плагина jQuery , который заставил меня задуматься о:
jquery.myplugin.deletable.js
(function($) {
var extensionMethods = {
delete : function(elem){ console.log("deleting "+elem); }
};
$.fn.list.deletable = function(){ return $.extend(true, $.fn.list.prototype, extensionMethods); };
})(jQuery);
, который, как я думал, позволил бы мнесделайте:
>>> $('#list').list.deletable();
>>> $('#list').list.deletable("delete", elem);
>>> $('#list').list.deleteable("search", "some element"); # Method from core
но ничего не происходит, так как я уверен, что есть что-то, что я не правильно понимаю.Может кто-нибудь помочь мне здесь?