JustPy Python中获取Ag-Grid筛选值返回None的问题求助
问题:JustPy中Ag-Grid无法获取筛选值(getFilterModel返回None)
使用JustPy编写获取Ag-Grid筛选值的功能,点击"Get applied filter"按钮后,控制台输出filterValues为None,无法正常获取筛选模型。原代码如下:
import justpy as jp grid_options = """ { rowSelection: 'multiple', defaultColDef: { filter: true, sortable: true, resizable: true, cellStyle: {textAlign: 'center'}, headerClass: 'font-bold' }, columnDefs: [ {headerName: "Make", field: "make"}, {headerName: "Model", field: "model"}, {headerName: "Price", field: "price"} ], rowData: [ {make: "Toyota", model: "Celica", price: 35000}, {make: "Ford", model: "Mondeo", price: 32000}, {make: "Porsche", model: "Boxter", price: 72000} ] } """ def row_selected(self, msg): wp = msg.page if msg.selected: wp.selected_rows[msg.rowIndex] = msg.data else: wp.selected_rows.pop(msg.rowIndex) s = f'Selected rows {sorted(list(wp.selected_rows.keys()))}' for i in sorted(wp.selected_rows): s = f'{s}\n Row {i} Data: {wp.selected_rows[i]}' if wp.selected_rows: wp.rows_div.text = s else: wp.rows_div.text = 'No row selected' async def get_all_filter(self, msg): filterValues = await self.grid.run_api('getFilterModel()', msg.page) print(filterValues) msg.page.filterValues = filterValues async def select_all_rows(self, msg): await self.grid.run_api('selectAll()', msg.page) async def deselect_rows(self, msg): await self.grid.run_api('deselectAll()', msg.page) def grid_test(): wp = jp.WebPage() wp.selected_rows = {} # Dictionary holding selected rows wp.filterValues = {} # Dictionary holding grid filter values grid = jp.AgGrid(a=wp, options=grid_options, style='height: 200px; width: 300px; margin: 0.25em') grid.options.columnDefs[0].checkboxSelection = True grid.on('rowSelected', row_selected) wp.rows_div = jp.Pre(text='Data will go here when you select rows', classes='border text-lg', a=wp) btn_deselect = jp.Button(text='Deselect rows', classes=jp.Styles.button_simple+' m-2', a=wp, click=deselect_rows) btn_deselect.grid = grid btn_select_all = jp.Button(text='Select all rows', classes=jp.Styles.button_simple+' m-2', a=wp, click=select_all_rows) btn_select_all.grid = grid btn_get_filter = jp.Button(text='Get applied filter', classes=jp.Styles.button_simple+' m-2', a=wp, click=get_all_filter) btn_get_filter.grid = grid return wp jp.justpy(grid_test)
问题原因与解决方法
核心问题
调用run_api时存在两个错误:
- 传递了带括号的API调用字符串
'getFilterModel()',JustPy要求传递**方法名(不带括号)**即可 - 额外传递了
msg.page参数,run_api方法内部会自动处理页面上下文,无需手动传入
修正后的关键代码
修改get_all_filter函数,同时同步修正select_all_rows和deselect_rows函数的调用方式:
async def get_all_filter(self, msg): filterValues = await self.grid.run_api('getFilterModel') print(filterValues) msg.page.filterValues = filterValues async def select_all_rows(self, msg): await self.grid.run_api('selectAll') async def deselect_rows(self, msg): await self.grid.run_api('deselectAll')
说明
- JustPy的
run_api方法会自动将传入的方法名转化为前端Ag-Grid的API调用,无需手动添加括号 - 去掉多余的
msg.page参数后,方法能正确获取并返回筛选模型数据,此时在控制台就能看到当前的筛选值,同时msg.page.filterValues也会被正确赋值
内容的提问来源于stack exchange,提问作者Kanda
相关产品推荐
相关产品推荐

