NativeScript Slider observable停止更改后执行事件

时间:2016-06-16 02:51:17

标签: javascript observable nativescript

我有一个滑块,其值绑定到一个observable,一切都很棒。

我在滑块上设置Observable.propertyChangeEvent,以便在更改observable时(当用户拖动滑块时)获取事件。

slider.on(Observable.propertyChangeEvent, function(data: PropertyChangeData) {
       console.log('EventName: ' + data.eventName);
       console.log('PropName: ' + data.propertyName);
       console.log('Value: '  + data.value);
})

我想要的是什么:

我希望一旦observable退出一段时间(例如:1000ms),就会执行一个事件。最重要的是,如果观察者再次开始改变,则停止此事件的方法。一旦用户在其目的地设置滑块以更新UI的其他部分,我需要进行一些处理。因此,如果用户再次开始更改它,出于性能目的,最好停止该处理,然后在用户调整滑块完成更改后执行。

我正在考虑设置一个变量然后启动一个计时器,但它现在不是点击对我来说:)

使用Underscore.js _.debounce()

更新答案建议
let underscore = require("underscore");
function debouncedValue(data: PropertyChangeData) {
        console.log('NewSlider value: ' + data.value);
 }

let debouncedSlider = underscore.debounce(debouncedValue, 800);

slider.on(Observable.propertyChangeEvent, debouncedSlider);

1 个答案:

答案 0 :(得分:0)

在UnderscoreJS中你有一个名为debounce的功能,它完全符合你在这里想要达到的目的。

来自文档:

_.debounce(function, wait, [immediate])  
  

创建并返回传递函数的新debounced版本,该函数将推迟它   执行直到自上次经过等待毫秒之后   它被调用的时间。用于实现仅应该执行的行为   在输入停止到达后发生。例如:渲染a   预览Markdown注释,在窗口后重新计算布局   已停止调整大小等等。