Как выполнить обратный вызов только при отпускании слайдера Bokeh - PullRequest
0 голосов
/ 24 января 2019

У меня есть ползунок, который влияет на линию на графике:

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

Я бы хотел, кроме изменения строки, также выполнить операцию, вызвать ее commit_line() через JS, которая отправляет значение (а затем обновляет другой график).

Я мог бы сделать обратный вызов выше вызова commit_line(), но это не подходит, потому что он сделает пару сотен вызовов на сервер, просто сдвинув ползунок.

В UX это обычно решается путем выполнения только дорогостоящей операции on release (ползунка). Можно ли этого добиться с помощью ползунков Bokeh? Если да, то как?

1 Ответ

0 голосов
/ 29 марта 2019

Передайте параметр 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 развернуть прототип JSON, чтобы узнать, какие атрибуты поддерживает метод (многие из них наследуются от базовых классов). Обратите внимание, что это относится к модели BokehJS, поэтому не гарантируется, что вы найдете их все в модели DOM при проверке кода, например, в. Инструменты разработчика Google Chrome.

...