2つのSelectウィジェットの値に基づいてデータをフィルタリングしたいと思います。ここでsource['level'] == level
とsource['country'] == country
。
CustomJSを使用して、を使用してlevel
フィルターを機能させることができましたcb_obj
。
ただしcb_obj
、それをトリガーしたウィジェットのみを参照します。コールバック関数で他の選択ウィジェットの値を取得するにはどうすればよいですか?
私も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();
"""
次のSelect
ように、両方のウィジェットをコールバックに明示的に渡すことができます。
callback = CustomJS(args=dict(source = source,
ts = true_source,
level = level,
country = country), code=code)
その後、代わりにcb_obj.value
あなたの使用して値を取得する:level.value
とcountry.value
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加