Контрольный вопрос YUI API Dual Slider

Я использую библиотеку 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;
    }

person julio    schedule 27.10.2010    source источник


Ответы (1)


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

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

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

person Luke    schedule 28.10.2010
comment
спасибо, Люк - это то, о чем я думал, и вы тоже прибили это примером! Я ценю помощь. - person julio; 29.10.2010