【问题标题】:Snap a webOS Slider widget to integers将 webOS Slider 小部件捕捉到整数
【发布时间】:2011-04-17 00:17:36
【问题描述】:

在 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 似乎没有任何作用,尽管文档和示例代码表明这是可行的。任何想法为什么我的代码不起作用以及我可以做些什么来达到预期的效果?

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

【问题讨论】:

    标签: javascript webos mojo-sdk


    【解决方案1】:

    问题似乎是小部件的 handleModelUpdate 中的检查。有一个标志 (this.seeking) 可防止小部件在拖动过程中处理模型更改。当小部件上发生“drop”时,该标志被清除,但在清除标志前 2 行触发了 propertyChange 事件。

    解决方案可能很简单,只需添加一个非常短暂的超时,以便在您再次更新模型之前完成当前脚本执行。

    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;
        }
    }; 
    

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 2011-10-29
      • 2021-11-22
      • 2013-03-03
      • 2011-10-18
      • 2017-10-29
      • 1970-01-01
      • 2016-09-13
      • 2021-12-13
      相关资源
      最近更新 更多