我希望能够在CustomJS回调中引用2个选择的小部件(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
这导致错误:未定义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
传递给回调中的args:
callback = CustomJS(args=dict(source=source, ts=true_source, select1=select1), code="""
var f = select1.value
由于select1
的参数为callback=callback
,如果我在定义select1
之前先定义callback
,则python将会产生错误,因为callback
是分配前引用。反之亦然,如果我在选择小部件之前定义了callback
。
所以我尝试了这一点:两次定义了select1
select1 = ... (without the callback argument)
callback = ...
select1 = ... (with the callback argument)
这最终生成了散景图。但是当我单击选择窗口小部件时,没有任何价值。
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.value
提供默认值参数,则 select1
将不为空:
select1 = Select(title="Level:", value='1', options=['All Levels', '1', '2', '3'], callback=callback)
但是,无论我将小部件的实际值更改为什么,select1.value
都将保持为'1'。因此,该值根本不会更新。
感谢您的帮助。谢谢!
答案 0 :(得分:0)
我终于使它起作用了。我使用js_on_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)js_on_change
select1.js_on_change('value', callback)