YUI API Dual Slider контрольный вопрос - PullRequest
0 голосов
/ 28 октября 2010

Я использую библиотеку YUI 2.7 для управления двойным ползунком (бегунок диапазона) на веб-странице.

Это прекрасно работает - однако я хотел позволить пользователям переключать значения диапазона с помощью Ajax - эффективно изменяя диапазон цен с "0-50 000" на подмножество (например, "50-250") без перезагрузки стр.

Проблема в том, что, похоже, значения из существующего ползунка не сбрасываются, даже когда я явно устанавливаю их обратно в NULL внутри функции, чтобы "перестроить" ползунок.

Ручки ползунка появляются вне позиции после запроса ajax (далеко от шкалы вправо), и значения ползунка, по-видимому, случайным образом колеблются.

Есть ли способ явно уничтожить объект ползунка YUI, кроме установки его ссылки на ноль? Или мне просто нужно как-то переопределить масштаб и минимальные / максимальные значения?

Спасибо за любую помощь (я постараюсь опубликовать ссылку на пример как можно скорее)

вот код:

function slider(bg,minthumb,maxthumb,minvalue,maxvalue,startmin,startmax,aSliderName,soptions) {
        var scaleFactor = null;
        var tickSize = null;
        var range = null;
        var dual_slider = null;
        var initVals = null;
        var Dom = null;

        range = options.sliderLength;
        if ((startmax - startmin) < soptions.sliderLength) {
            tickSize = (soptions.sliderLength / (startmax - startmin));
        }else{
            tickSize = 1;
        }

        initVals = [ 0,soptions.sliderLength ], // Values assigned during instantiation
        //Event = YAHOO.util.Event,
        dual_slider,
        scaleFactor = ((startmax - startmin) / soptions.sliderLength); 

        dual_slider = YAHOO.widget.Slider.getHorizDualSlider(
        bg,minthumb,maxthumb,range, tickSize, initVals);

        dual_slider.subscribe("change", function(instance) {
            priceMin = (dual_slider.minVal * scaleFactor) + startmin;
            priceMax = (dual_slider.maxVal * scaleFactor) + startmin;
        });

        dual_slider.subscribe("slideEnd", function(){ alert(priceMin + ' ' + priceMax); });
        return dual_slider;
    }

1 Ответ

2 голосов
/ 29 октября 2010

Сохраните startmin, startmax и scaleFactor для объекта dual_slider, затем в обратном вызове ajax обновите эти свойства новыми значениями. Измените подписчика на событие изменения, указав ссылку на this.startmin, this.startmax и this.scaleFactor.

Slider и DualSlider действительно действительно понимают смещение пикселей в больших пальцах и сообщают значения как таковые. Как вы уже сделали (и для большинства примеров Slider), вам нужно применить коэффициент преобразования, чтобы перевести смещение пикселя в «значение». Эта общая идиома была включена в основную логику слайдера YUI 3 (хотя в библиотеке еще нет DualSlider).

Вот пример, который иллюстрирует динамически обновляемые диапазоны значений: http://yuiblog.com/sandbox/yui/v282/examples/slider/slider_factor_change.html

...