Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bokeh:引用CustomJS回调中的选择小部件_Javascript_Python_Pandas_Bokeh - Fatal编程技术网

Javascript Bokeh:引用CustomJS回调中的选择小部件

Javascript Bokeh:引用CustomJS回调中的选择小部件,javascript,python,pandas,bokeh,Javascript,Python,Pandas,Bokeh,我希望能够在CustomJS回调中引用2个Select小部件(select1.value和select2.value),因此我不能使用cb_obj.value select1 = Select(title="Level:", options=['All Levels', '1', '2', '3'], callback=callback) 首先,我尝试在回调中直接引用它的值: callback = CustomJS(args=dict(source=source, ts=true_source

我希望能够在CustomJS回调中引用2个Select小部件(
select1.value
select2.value
),因此我不能使用
cb_obj.value

select1 = Select(title="Level:", options=['All Levels', '1', '2', '3'], callback=callback)
首先,我尝试在回调中直接引用它的值:

callback = CustomJS(args=dict(source=source, ts=true_source), code="""
var f = select1.value
 callback = CustomJS(args=dict(source=source, ts=true_source, select1=select1), code="""
    var f = select1.value
这导致错误:未定义select1:

    Uncaught ReferenceError: select1 is not defined
    at eval (eval at get (bokeh-1.1.0.min.js:31), <anonymous>:9:11)
    at i.execute (bokeh-1.1.0.min.js:31)
    at e.change_input (bokeh-widgets-1.1.0.min.js:31)
    at e.change_input (bokeh-widgets-1.1.0.min.js:31)
    at HTMLSelectElement.<anonymous> (bokeh-widgets-1.1.0.min.js:31)
因为
select1
的参数是
callback=callback
,如果我在定义
callback
之前定义
select1
,python将生成一个错误,因为
callback
在赋值之前被引用。反之亦然,如果我在选择小部件之前定义
回调

所以我尝试了这个方法:定义
select1
两次

select1 = ... (without the callback argument)
callback = ...
select1 = ... (with the callback argument)
这最终生成了博克图。但是当我点击select小部件时,没有任何价值

var f=select1.value;
console.log('Select1 type ' + f.constructor.name.toLowerCase()); // string, as expected
console.log('Value ' + f); // outputs 'Value ', so f is nothing
console.log('Select1 options ' + select1.options); // Output is as expected
select1。如果我为
select1
提供默认值参数,则value
不会为空:

select1 = Select(title="Level:", value='1', options=['All Levels', '1', '2', '3'], callback=callback)
但是,
select1.value
将保持为“1”,无论我将小部件的实际值更改为什么。因此,该值根本没有更新


我感谢你的帮助。。谢谢

我终于成功了。我使用了
js\u on\u change
而不是添加
callback
作为小部件参数

在回调函数中,我将小部件名称作为参数传递

1) 定义选择小部件,这是指定默认值所必需的

select1 = Select(title="Level:", value='All Levels', options=['All Levels', '1', '2', '3'])
select2 = Select(...)
2) 定义回调,将小部件显式作为参数传递

callback = CustomJS(args=dict(source=source, ts=true_source, select1=select1, select2=select2), code="""
f = select1.value
g = select2.value
"""
3) 改变

select1.js_on_change('value', callback)

在Bokeh2.0中,小部件上的单个
回调
属性将被删除。
js_on_change
是一种新的通用机制,适用于任何模型上的任何属性,在这一点上应该始终是首选。