当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使用事件处理程序替换复杂的结构.
为了回答我自己的评论,我提出了以下黑客攻击.它可能不漂亮,但它似乎工作.
将以下行添加到下面的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)
基本答案是不要!您提出的是一个非常糟糕的设计,违背了 SlickGrid 的核心原则和架构。
您最终会做大量冗余工作并否定 SlickGrid 的大部分性能优势。当您滚动时,网格将动态创建和删除行 DOM 节点,并根据当时最适合的方式同步或异步执行此操作。如果单元格中必须具有丰富的交互式内容,请使用自定义单元格渲染器,并使用其提供的事件(例如 onClick)将所有事件处理委托给网格级别。如果绝对无法使用渲染器创建单元格的内容,请使用异步后期渲染 - http://mleibman.github.com/SlickGrid/examples/example10-async-post-render.html。即使如此,网格内容也不应该将任何事件侦听器直接注册到 DOM 节点。
为了解决 @magiconair 的评论,在单元格切换到编辑模式之前,您确实不应该渲染整个 SELECT 及其所有选项和事件处理程序。