diff --git a/README.md b/README.md index 55dcd32..cf67280 100644 --- a/README.md +++ b/README.md @@ -253,6 +253,22 @@ self.tabulator.columns = [ If using a Form as the `formatter` then the `data` for the current row will be passed as the `item` allowing data bindings to be used. +If you need the `onRendered` callback. You can add a `cell_render` option to your column definition. +e.g. + +```python + + columns = [ + ..., + {"title": "Sparkline Column", ..., "cell_render": self.sparkline_render}, + ] + + def sparkline_render(self, cell): + el = cell.getElement() + jQuery(el).sparkline(cell.getValue(), {"width":"100%", "type":"bar"}) + +``` + **Row Selction Formatter** diff --git a/client_code/Tabulator/_custom_modules.py b/client_code/Tabulator/_custom_modules.py index 10fa8bf..2ba8b7f 100644 --- a/client_code/Tabulator/_custom_modules.py +++ b/client_code/Tabulator/_custom_modules.py @@ -34,6 +34,9 @@ def initialize(self): self.mod.subscribe("cell-format", self.cell_format) self.mod.subscribe("cell-rendered", self.cell_render) self.mod.subscribe("cell-delete", self.cell_delete) + # because we don't support onRendered callbacks + self.mod.registerColumnOption("cellRender", None) + self.mod.registerColumnOption("cellRenderParams", None) def cell_format(self, cell, component): if not isinstance(component, Component): @@ -48,6 +51,12 @@ def cell_render(self, cell): component = cell.modules.get("anvilComponent") if component is not None and component.visible is None: component.visible = True + renderCallback = cell.column.definition.get("cellRender", None) + if renderCallback: + renderParams = cell.column.definition.get("cellRenderParams", {}) + if callable(renderParams): + renderParams = renderParams() + renderCallback(cell.getComponent(), **renderParams) def cell_delete(self, cell): component = cell.modules.get("anvilComponent") @@ -60,7 +69,7 @@ def cell_wrapper(f): return lambda cell, **params: f(cell=cell, **params) elif hasattr(f, "init_components"): # TODO - this could break if trying to use as both an editor and a headerFilter - def render_form(cell, on_rendered=None, **params): + def render_form(cell, **params): data = cell.getData("data") if type(data) is JsProxy: data = dict(data) @@ -68,11 +77,7 @@ def render_form(cell, on_rendered=None, **params): return render_form else: - - def render_component(cell, on_rendered=None, **params): - return f(**params) - - return render_component + return lambda cell, **params: f(**params) class AbstractCallableWrapper(AbstractModule): @@ -103,12 +108,7 @@ class FormatterWrapper(AbstractCallableWrapper): @staticmethod def wrap(f): f = cell_wrapper(f) - - def wrapped(cell, params, onRendered): - params["on_rendered"] = onRendered - return f(cell, **params) - - return wrapped + return lambda cell, params, onRendered: f(cell, **params) @tabulator_module("sorterWrapper", moduleInitOrder=-10)