Привязать виджет слайдера WebOS к целым числам - PullRequest
3 голосов
/ 17 апреля 2011

В приложении WebOS у меня есть Mojo.Widget.Slider, который я использую, чтобы установить целое число в 0, 1 или 2. Я уже сам забочусь о округлении значения Slider (хотя есть функция, которая сделает это за вас, но я прекратил использовать его в случае, если это было источником моей проблемы, но это не так), но я бы хотел, чтобы ползунок привязывался к закругленному целочисленному положению после того, как пользователь сделал скольжение.Насколько я могу судить, ничего встроенного для этого нет, поэтому я должен сделать это сам.Я думал, что что-то вроде следующего будет работать.

В функции настройки моего помощника по сцене:

this.mySliderModel = {value: 1};
this.controller.setupWidget('mySlider', {minValue: 0, maxValue: 2}, this.mySliderModel

И для прослушивания изменений в ползунке:

this.mySliderChangedEventListener = this.mySliderChanged.bindAsEventListener(this);
Mojo.Event.listen(this.controller.get("mySlider"), Mojo.Event.propertyChange, this.mySliderChangedEventListener);

Изатем слушатель:

MainAssistant.prototype.mySliderChanged = function(event) {
    var sliderValue = Math.round(event.value);
    switch (sliderValue) {
        case 0:
        case 1:
        case 2:
            //it's a good value
            //do some stuff

            this.mySliderModel.value = sliderValue;
            this.controller.modelChanged(this.mySliderModel);
            break;
        default:
            Mojo.Log.info("mySlider error value: ", event.value);
            break;
    }
};

Но изменение модели и вызов modelChanged, похоже, ничего не делают, хотя документация и пример кода показывают, что это может работать.Есть идеи, почему мой код не работает и что я могу сделать, чтобы добиться желаемого эффекта?

Примечание: я знаю, что могу добиться такого рода вещей, используя разные виджеты, но я бы хотел сделатьэто с ползунком.Использование чего-то другого - моя резервная копия, если я не могу найти способ заставить это работать.

1 Ответ

3 голосов
/ 10 мая 2011

Проблема заключается в проверке в handleModelUpdate виджета.Есть флаг (this.seeking), который не позволяет виджету обрабатывать изменения модели во время перетаскивания.Этот флаг сбрасывается, когда «выпадение» происходит в виджете, но событие propertyChange запускается за 2 строки до того, как флаг сбрасывается.

Решение может быть таким же простым, как добавление очень короткого тайм-аута, чтобы текущее выполнение скриптаможно закончить, прежде чем обновлять модель снова.

MainAssistant.prototype.mySliderChanged = function(event) {
    var sliderValue = Math.round(event.value);
    switch (sliderValue) {
        case 0:
        case 1:
        case 2:
            //it's a good value
            //do some stuff
            setTimeout(function() {
                this.mySliderModel.value = sliderValue;
                this.controller.modelChanged(this.mySliderModel);
            }.bind(this), 100);
            break;
        default:
            Mojo.Log.info("mySlider error value: ", event.value);
            break;
    }
}; 
...