仅在释放“散景”滑块时如何执行回调

时间:2019-01-24 13:37:14

标签: bokeh

我有一个滑杆会影响图中的直线:

vline = Span(location=0, dimension='height')
plot.renderers.extend([vline])

callback = CustomJS(args=dict(vline=vline), code="vline.location = slider.value;")

slider = Slider(start=-5, end=5, value=0, step=.1, callback=callback)
callback.args["slider"] = slider

除了更改行之外,我还希望执行一个操作,通过JS将其命名为commit_line(),该操作会过帐该值(并随后更新另一个图)。

我可以在调用commit_line()上进行回调,但这是不合适的,因为仅通过滑动滑块就可以对服务器进行数百次调用。

在UX中,通常可以通过仅执行(滑块的)昂贵的操作on release来解决此问题。可以在Bokeh滑块中实现吗?如果是,怎么办?

2 个答案:

答案 0 :(得分:1)

callback_policy = "mouseup"参数传递给Slider构造函数。或使用callback_throttle = 2000参数以毫秒为单位设置周期,滑块可以多久触发一次“更改”事件。

所以:

slider = Slider(start = 1, 
                end = 10, 
                value = 1, 
                step = 1, 
                callback_policy = 'mouseup')

slider = Slider(start = 1, 
                end = 10, 
                value = 1, 
                step = 1, 
                callback_policy = 'throttle', 
                callback_throttle = 2000)

在咨询Bokeh documentation来扩展JSON原型以找出该方法支持哪些属性时很方便(很多继承自基类)。请注意,这是指BokehJS模型,因此不能保证在检查代码时例如在DOM模型中都能找到它们。 Google Chrome开发者工具。

答案 1 :(得分:1)

在Bokeh 2.2.0中,尝试使用“ value_throttled”属性:

self.date_range.on_change("value_throttled", callback)

这对我来说适用于DateRangeSlider-会基于继承层次结构期望其他Sliders具有类似的行为。