Есть класс javascript выглядит примерно так:
function JCSmartFilter(ajaxURL, viewMode, params)
{
this.ajaxURL = ajaxURL;
this.form = null;
this.timer = null;
this.cacheKey = '';
this.cache = [];
this.popups = [];
this.viewMode = viewMode;
//Проверка всяких параметров и т.п.
}
//Некоторые методы этого класса, все добавлены через prototype
JCSmartFilter.prototype.keyup = function(input){
if(!!this.timer){
clearTimeout(this.timer);
}
this.timer = setTimeout(BX.delegate(function(){
this.reload(input);
}, this), 500);
};
JCSmartFilter.prototype.click = function(checkbox){
$(checkbox).parent('.input-checkbox').toggleClass('checked');
if(!!this.timer){
clearTimeout(this.timer);
}
this.timer = setTimeout(BX.delegate(function(){
this.reload(checkbox);
}, this), 500);
};
//... и т.д.
класс отвечает за управление формой фильтра. Я хочу добавить в него некоторые плагины для улучшения интерфейса фильтра, но при попытке это сделать происходит потеря контекста вызова и в этот момент я не могу использовать методы исходного класса. Например, пытался для бегунков цены прикрутить noUiSlider, в соответствующем месте исходного класса добавил такой код:
//запоминаем поля минимальной/максимальной цены
minPrice = document.getElementById('MIN_PRICE');
maxPrice = document.getElementById('MAX_PRICE');
//Отслеживаем событие обновления noUiSlider (т.е. пользователь передвинул бегунок "минимальной цены" например )
html5Slider.noUiSlider.on('update', function( values, handle ) {
var value = values[handle];
//Проставляем значения из noUiSlider
if ( handle ) {
maxPrice.value = Math.round(value);
} else {
minPrice.value = Math.round(value);
}
//Ну и вот к этому моменту контекст вызова уже потерян и теперь я не могу вызвать метод reload для того чтобы
// ajax-ом отправить форму и получить результат
});
В итоге вызов потерян, фильтр не работает, я опечален =( . Вот как правильно добавить ( и возможно ли ) сторонний jQuery плагин в существующий JavaScript класс?