在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来实现。如果我找不到合适的方法,那么使用其他东西是我的备份。
答案 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;
}
};