2016-09-16 103 views
0

如何通過單擊按鈕或在散景中檢查單獨的複選框來檢查CheckBoxGroup中的複選框?散景 - 使用按鈕/複選框回調選中複選框

我知道這個解決方案在JavaScript jquery check uncheck all checkboxes with a button

然而在customJS通過checkboxgroup背景虛化的對象無法與.prop操縱! 另外我不知道一種方法來訪問複選框組內的個人複選框。 我不知道如何做到這一點與散景checkboxgroup對象。

這裏是我試過,情節是包含在人物不同的散點圖列表:

checkbox = CheckboxGroup(labels=[str(i) for i in range(len(plots))],active=range(len(plots)),width=200) 
iterable = [('p'+str(i),plots[i]) for i in range(len(plots))]+[('checkbox',checkbox)] 
code = ''.join(['p'+str(i)+'.visible = '+str(i)+' not in checkbox.active;' for i in range(len(plots))]) 
checkbox.callback = CustomJS(args={key: value for key,value in iterable},lang="coffeescript", code=code) 

checkbox2 = CheckboxGroup(labels=['check all'],active=[0],width=100) 

checkbox2.callback = CustomJS(args={'checkbox':checkbox}, code = """ 
if (0 not in cb_obj.active){ 
    checkbox.set("active",_.range(27); 
} 
checkbox.trigger("change"); 
    """) 

範圍(27),因爲LEN(圖)= 27。 我的第一個複選框組完全正常工作以觸發圖中圖的可見性。然而,第二個複選框不起作用。

回答

0

我改編了Bigreddot這個問題的答案:Bokeh widget callback to select all checkboxes要從CustomJS回調中獲得類似的效果。

假設出了「自留地」地塊的名單,這裏是觸發線的知名度複選框的例子:

N_plots = range(len(plots)) 
checkbox = CheckboxGroup(labels=[str(i) for i in N_plots],active=N_plots,width=200) 

iterable = [('p'+str(i),plots[i]) for i in N_plots]+[('checkbox',checkbox)] 

checkbox_code = ''.join(['p'+str(i)+'.visible = checkbox.active.includes('+str(i)+');' for i in N_plots]) 
checkbox.callback = CustomJS(args={key: value for key,value in iterable}, code=checkbox_code) 

這裏有一個按鈕,可以清除所有的複選框:

clear_button = Button(label='Clear all') 
clear_button_code = "checkbox.active=[];"+checkbox_code 
clear_button.callback = CustomJS(args={key: value for key,value in iterable}, code=clear_button_code) 

這裏是一個檢查所有複選框的按鈕:

check_button = Button(label='Check all') 
check_button_code = "checkbox.active="+str(N_plots)+";"+checkbox_code 
check_button.callback = CustomJS(args={key: value for key,value in iterable}, code=check_button_code)