Я знаю, что jQuery не предназначен для работы с классоподобной моделью, но я действительно мог бы иметь возможность расширять базовый класс, так как он идеально соответствует моим потребностям.
Я начал с того, что сделал следующее:
jQuery.myBase = {
foo: 'bar',
bar: function() { ... }
}
jQuery.fn.myPlugin = function() {
$.extend( this, jQuery.myBase, {
oof: 'rab',
rab: function() { ... }
}
}
Это все работает нормально, я могу получить доступ к базовым методам и свойствам через this
. До тех пор, пока я не попытаюсь добавить что-то вроде обработчика событий jQuery (и т. Д.), Который применяет цель события к this
.
Итак, со следующим:
jQuery.myBase = {
bar: function() { ... }
}
jQuery.fn.myPlugin = function() {
jQuery.extend( this, jQuery.myBase, {
init: function() {
jQuery('#someEl').click( this.onClick );
},
onClick: function(e) {
// this now references the element I bound the event to (<div id="someEl" />)
// so the following doesn't work
this.bar();
}
}
}
Я нашел несколько вещей для создания классов и наследования, которые работают с jQuery (например, один Джон Резиг и DUI ), но те будут / будут испытывать ту же проблему .
Так после всего этого, как мне добраться до оригинального this
в этих ситуациях?
Обновление: Обработчик событий (и т. Д.) Может быть либо в jQuery.myBase
, либо в самом плагине.