我有一个滑杆会影响图中的直线:
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滑块中实现吗?如果是,怎么办?
答案 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具有类似的行为。