我想根据来自两个选择小部件的值过滤我的数据,其中source['level'] == level
和source['country'] == country
。
通过使用CustomJS,我能够使用cb_obj
让level
过滤器工作。
但是cb_obj
只引用触发它的小部件。如何在回调函数中获取其他select小部件的值?
我也需要坚持使用CustomJS,谢谢!
示例代码:
# Level
level = Select(title="Level:", value='All Levels', options=['All Levels', '1', '2', '3'], callback=callback)
# Country
country = Select(title="Country:", value='All Countries', options=['All Countries', 'US', 'UK', 'CAN'], callback=callback)
callback = CustomJS(args=dict(source=source, ts=true_source), code="""
var df = source.data;
var data = ts.data;
var data_level = data['Level'];
var l=cb_obj.value;
var data_x = data['x'];
var data_y = data['y'];
var x=[];
var y=[];
for (var i=0;i<data_level.length; i++){
// Here: I want to add (Level) and (Country) filters
// But I'm not sure how to reference Country widget value
if(l=='All Levels' || data_level[i]==l){
x.push(data_x[i]);
y.push(data_y[i]);}}
df['x'] = [];
df['y'] = [];
df['x'] = x;
df['y'] = y;
source.change.emit();
"""
发布于 2019-05-14 11:49:16
您可以将这两个Select
小部件显式传递给回调,如下所示:
callback = CustomJS(args=dict(source = source,
ts = true_source,
level = level,
country = country), code=code)
然后使用:level.value
和country.value
而不是cb_obj.value
来获取值
https://stackoverflow.com/questions/56119104
复制相似问题