Оказывается, что JQuery 1,5 имеет новый метод, называемый суб :)
Согласно документации, к югу
создает новую копию JQuery, свойства и методы могут быть изменены без влияния оригинальный объект jQuery. http://api.jquery.com/jQuery.sub/
Этот метод не позволяет создать подкласс подкласса, но я нашел модифицированный метод в своем трекере билет, который позволил это:
jQuery.subclass = function(){
function jQuerySubclass(selector, context) {
return new jQuerySubclass.fn.init(selector, context);
}
jQuery.extend(true, jQuerySubclass, this);
jQuerySubclass.superclass = this;
jQuerySubclass.fn = jQuerySubclass.prototype = this();
jQuerySubclass.fn.constructor = jQuerySubclass;
jQuerySubclass.fn.init = function init(selector, context) {
if (context && context instanceof jQuery && !(context instanceof jQuerySubclass)){
context = jQuerySubclass(context);
}
return jQuery.fn.init.call(this, selector, context, rootjQuerySubclass);
};
jQuerySubclass.fn.init.prototype = jQuerySubclass.fn;
var rootjQuerySubclass = jQuerySubclass(document);
return jQuerySubclass;
};
Это позволяет сделать что-то вроде этого:
var Calendar = jQuery.subclass();
Calendar.create = function() {
var cal = Calendar(/* some html code for building the calendar */);
// Do some processing like binding events, etc
return cal;
}
Calendar.fn.val = function(value) {
//Calendar's implementation of val
}
объект Calendar будет действовать точно так же, как объект JQuery кроме для тех выше различий. Он также правильно вернет экземпляр Календаря, когда я объединю методы вместе. Это аккуратное, потому что
- Мы можем легко создавать собственные виджеты без загромождения пространства имен JQuery .
- Мы можем предоставить наши собственные реализации методов JQuery
- Мы можем использовать силы JQuery с методами, как спусковой крючок и связать уже часть класса
Далее, я заинтересован в разрешении классов, чтобы быть зарегистрированный селектором. Таким образом, когда вы вызываете $ ('. MyAwesomeCalendar'), вы вернете объект Calendar без явного вызова Calendar ('. MyAwesomeCalendar').
для вашего последнего комментария, о наличии разных подклассов, назначенных классом css, вы ищете что-то более чистое, чем переопределение $ .fn.init? – NullVoxPopuli