将webOS Slider小部件捕捉到整数

时间:2011-04-17 00:17:37

标签: javascript webos mojo-sdk

在webOS应用程序中,我有一个Mojo.Widget.Slider,用于将整数设置为0,1或2.我自己已经完成了舍入Slider值(虽然有一个功能可以做到这一点)对你来说,但我停止使用它,以防这是我的问题的根源,但事实并非如此),但我希望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似乎没有做任何事情,尽管文档和示例代码显示这可以工作。任何想法为什么我的代码不起作用,我能做些什么来达到预期的效果?

注意:我知道我可以使用不同的小部件来实现这种功能,但我想用Slider来实现。如果我找不到合适的方法,那么使用其他东西是我的备份。

1 个答案:

答案 0 :(得分:3)

问题似乎是在小部件的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;
    }
};