Bokeh datatable in-cell edition - bokeh-tables-0.12.15.js中的错误?

时间:2018-04-04 09:51:22

标签: python datatable bokeh

我只想尝试一个工作示例,我可以将数据表的值直接编辑到单元格中。

我收到JS错误,但不幸的是我对JS没有任何了解:/

以下是用于重现错误的代码:

from bokeh.plotting import show, curdoc
from bokeh.models import ColumnDataSource
from bokeh.models.widgets.tables import DataTable, TableColumn, BooleanFormatter, CheckboxEditor
from bokeh.models.widgets.tables import NumberFormatter, NumberEditor, IntEditor, TextEditor, StringEditor, StringFormatter

# DataTable construction
dico = dict(
    nom=["Abathur", "Tychus", "Nova"],
    alive=[False] * 3,
    age=[x for x in range(0, 3)])
source_dt = ColumnDataSource(data = dico)
columns = [
    TableColumn(field="nom", title="Nom", editor=StringEditor(), formatter=StringFormatter()),
    TableColumn(field="alive", title="Alive", editor=CheckboxEditor(), formatter=BooleanFormatter(icon="check")),
    TableColumn(field="age", title="Age", formatter=NumberFormatter(), editor=IntEditor())
]
dt = DataTable(width=400, height=600, source=source_dt, columns=columns, editable=True, selectable=True)

# show(dt)

curdoc().add_root(dt)

以下是我尝试更改字符串/文本值的数据表的屏幕截图:enter image description here

当我使用enter-key验证或点击其他地方时,数据表被冻结,我在Firefox中的JS控制台收到错误:enter image description here

与chrome相同的观察结果,来自Chrome控制台的错误:enter image description here

工作环境是由Anaconda,webbrowser firefox 59或chrome 65提供的Windows 10,python 3.6和散景0.12.15 还在debian 8上测试了由新鲜的anaconda装置提供的散景

我做错了吗?你有一个工作样本,其中数据表的值可以在单元格中编辑吗?

编辑: 我能够找到引起错误的代码,它位于文件https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.js 13440行

var validationResults = currentEditor.validate();
if (validationResults.valid) {                    <<---- RAISE THE ERROR

出于逃避我的原因,currentEditor.validate();不会返回任何内容而validationResults仍为undefined

我还测试了github示例https://github.com/bokeh/bokeh/blob/master/examples/models/file/data_tables.py中的data_tables.py,得到了相同的结果

1 个答案:

答案 0 :(得分:0)

我终于找到了问题: 档案https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.15.js 必须更改第118行

// OLD not working code
CellEditorView.prototype.validate = function () {
        this.validateValue(this.getValue());
    };

// NEW working code
CellEditorView.prototype.validate = function () {
        return this.validateValue(this.getValue());  <<---- added "return"
    };

通过此修改,我现在可以编辑数据表中的单元格内容。

我打开了一个github问题,让有能力的人正确地解决它https://github.com/bokeh/bokeh/issues/7768