我有一个使用缓冲渲染器的网格。
对于打印,我将网格DOM复制到一个新窗口,然后将其发送到打印机。为了实现这一点,DOM必须完全呈现,但是使用缓冲的渲染器,它不是。
如果必须,我将完全禁用缓冲渲染器,但由于只有少数用户使用打印功能,我宁愿不这样做。
是否有可能在获取DOM之前暂时关闭bufferedRenderer,然后再将其重新打开?
答案 0 :(得分:4)
我不确定它对你有什么帮助,但我通过在运行时增加视图大小来做类似的事情。
假设您使用此配置缓存了渲染器:
ptype : 'bufferedrenderer',
trailingBufferZone : 20,
leadingBufferZone : 50
动态地,您可以通过获取插件的引用并使用setViewSize(newSize)方法在运行时设置viewsize。
例如:
var dd=Ext.ComponentQuery.query("#ExampleTreePanel")[0];
var bufferedRendererPlugin = dd.plugins[0];
bufferedRendererPlugin.setViewSize(100000);
这个大尺寸只是我们可以假设的一个大数字,因此DOM将被完全加载并且您可以将其打印出来。这是一种解决方法。您可以再次通过将视图设置为较小的数字来调整视图大小。
bufferedRendererPlugin.setViewSize(115);
答案 1 :(得分:0)
我已经调整了Saloo的好答案来解决ExtJS 6和ExtJS 4之间不同的一些问题:
// Set view size to match store content:
this.bufferedRenderer.setViewSize(this.getStore().getCount());
// Refresh view, so that everything is rendered:
this.bufferedRenderer.refreshView(0);
// refreshView does not revert the node container's "translate" setting after the viewSize was changed to be equal or greater than the store count, so we have to enforce it manually:
this.getView().getEl().down(this.getView().getNodeContainerSelector()).translate(0,0,0);