当render()
方法完成其工作并将所有HTML元素附加到DOM时,我需要执行一些操作。
如何订阅onRenderEnds
事件(没有此类事件)?
我可以在slickgrid代码之外编写自己的事件并将其附加到render()
方法吗?
有一些事件"onScroll", "onViewportChanged"
,但它们发生在render()
完成之前(在某些情况下)。
更新: 我为列编写格式化程序:
formatter: function(row, cell, value, columnDef, dataContext){
return "<div class='operationList' data-my='" + myData + "'></div>";
}
当网格渲染(应用我的格式化程序)时,我需要遍历所有".operationList" divs
并将它们转换为其他构造(基于data-my
属性)。我需要将".operationList" divs
替换为具有事件处理程序的复杂结构。
答案 0 :(得分:8)
要回答我自己的评论,我想出了以下 hack 。它可能不是很漂亮但似乎有用。
将以下行添加到render()
renderRows(rendered);
方法中
function render() {
...
renderRows(rendered);
trigger(self.onRenderCompleted, {}); // fire when rendering is done
...
}
向公共API添加新的事件处理程序:
"onRenderCompleted": new Slick.Event(),
绑定到代码中的新事件:
grid.onRenderCompleted.subscribe(function() {
console.log('onRenderCompleted');
});
答案 1 :(得分:4)
基本答案是不要! 你提出的是一个非常糟糕的设计,违背了SlickGrid的核心原则和架构。
您将最终完成大量冗余工作并否定SlickGrid的大部分性能优势。当您滚动时,网格将动态创建和删除行DOM节点,并根据当时最适合的方式同步或异步地执行。如果单元格中必须包含丰富的交互式内容,请使用自定义单元格渲染器,并使用其提供的事件(如onClick)将所有事件处理委派给网格级别。如果使用渲染器无法创建单元格的内容,请使用异步后渲染 - http://mleibman.github.com/SlickGrid/examples/example10-async-post-render.html。即便如此,网格内容也不应该有任何直接向DOM节点注册的事件监听器。
要解决@ magiconair的评论,在单元格切换到编辑模式之前,你真的不应该用它的所有选项和事件处理程序渲染一个完整的SELECT。