在运行时启用/禁用缓冲渲染

时间:2016-09-15 13:00:54

标签: extjs

我有一个使用缓冲渲染器的网格。

对于打印,我将网格DOM复制到一个新窗口,然后将其发送到打印机。为了实现这一点,DOM必须完全呈现,但是使用缓冲的渲染器,它不是。

如果必须,我将完全禁用缓冲渲染器,但由于只有少数用户使用打印功能,我宁愿不这样做。

是否有可能在获取DOM之前暂时关闭bufferedRenderer,然后再将其重新打开?

2 个答案:

答案 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);