在render()方法完成后执行操作

Kal*_*nin 8 slickgrid

render()方法完成其工作并将所有HTML元素附加到DOM 时,我需要执行一些操作.如何订阅onRenderEnds活动(没有这样的活动)?我可以在slickgrid代码之外编写自己的事件并将其附加到render()方法吗?


有一些事件,"onScroll", "onViewportChanged"但它们发生在render()完成之前(在某些情况下).


更新:我为列编写格式化程序:

formatter: function(row, cell, value, columnDef, dataContext){
    return "<div class='operationList' data-my='" + myData + "'></div>";            
}
Run Code Online (Sandbox Code Playgroud)

当网格渲染(应用我的格式化程序)时,我需要遍历所有".operationList" divs并将它们转换为其他构造(基于data-my属性).我需要".operationList" divs使用事件处理程序替换复杂的结构.

mag*_*air 8

为了回答我自己的评论,我提出了以下黑客攻击.它可能不漂亮,但它似乎工作.

将以下行添加到下面的render()方法中renderRows(rendered);

function render() {
    ...
    renderRows(rendered);
    trigger(self.onRenderCompleted, {}); // fire when rendering is done
    ...
}
Run Code Online (Sandbox Code Playgroud)

向公共API添加新的事件处理程序:

"onRenderCompleted":            new Slick.Event(),
Run Code Online (Sandbox Code Playgroud)

绑定到代码中的新事件:

grid.onRenderCompleted.subscribe(function() {
    console.log('onRenderCompleted');
});
Run Code Online (Sandbox Code Playgroud)

  • 你可以做的是在github上分叉代码并保持自己的更改.然后,当您想要更新代码时,从主仓库中提取更改,您的更改应自动合并. (3认同)

Tin*_*Tin 4

基本答案是不要!您提出的是一个非常糟糕的设计,违背了 SlickGrid 的核心原则和架构。

您最终会做大量冗余工作并否定 SlickGrid 的大部分性能优势。当您滚动时,网格将动态创建和删除行 DOM 节点,并根据当时最适合的方式同步或异步执行此操作。如果单元格中必须具有丰富的交互式内容,请使用自定义单元格渲染器,并使用其提供的事件(例如 onClick)将所有事件处理委托给网格级别。如果绝对无法使用渲染器创建单元格的内容,请使用异步后期渲染 - http://mleibman.github.com/SlickGrid/examples/example10-async-post-render.html。即使如此,网格内容也不应该将任何事件侦听器直接注册到 DOM 节点。

为了解决 @magiconair 的评论,在单元格切换到编辑模式之前,您确实不应该渲染整个 SELECT 及其所有选项和事件处理程序。