在编辑主网格行时,rowBody 刷新丢失内部网格。 extjs 3..我可以重新渲染内部网格..吗?

Posted

技术标签:

【中文标题】在编辑主网格行时,rowBody 刷新丢失内部网格。 extjs 3..我可以重新渲染内部网格..吗?【英文标题】:rowBody refresh loosing the inner grid, on editing the main grid row. extjs 3.. can i re-render the inner grid..? 【发布时间】:2014-09-24 08:03:36 【问题描述】:

我正在使用enablerowbody:true,在rowBody 中插入div,使用getRowClass,并在此div 中渲染网格。最初它的加载很好(网格内的网格),

但是当我编辑主行内容时出现问题,之后getRowClass 再次触发,导致div 重新创建,因此丢失了渲染的网格..

如何重新渲染内部网格或避免重新创建 div..?

【问题讨论】:

【参考方案1】:

是的,很遗憾,这是默认行为。您需要侦听网格视图的beforerefresh 事件并将内部网格的元素移动到安全的地方,例如在侦听器中附加到文档正文但不可见。

然后,在refresh 事件中,您必须将内部网格移回外部网格 rowBody。

您不应该只重新创建内部网格而不进行适当的销毁以避免内存泄漏。

【讨论】:

我做到了,record.innerGrid=new Ext.grid.EditorGridPanel。所以我有组件但不可见.. 事情是,我无法将它移回外部网格 rowBody。怎么做..?我试过 record.InnerGrid.render(Ext.get('divId'));和record.innerGrid.getView().refresh(); 您需要在元素级别上工作。方法Ext.Element.appendChild 应该是你所需要的。【参考方案2】:

按照 saki 的建议,将 innerGrid 创建为

record.innerGrid=new Ext.grid.GridPanel();

然后在 gridView 的 rowupdated 监听器上重新渲染 innerGrid。

listeners: rowupdated:function( view, firstRow, record ) var tools=record.innerGrid.tools; record.innerGrid.rendered=false; record.innerGrid.tools=null; record.innerGrid.render(Ext.get('rowBodyDivId')); record.innerGrid.tools=tools;

注意:仅当内部网格不可编辑时才为真..

仍在尝试可编辑的 innerGrid(附加/触发的事件正在抛出错误)

【讨论】:

在这里,您可能会找到从内部网格触发事件的解决方案blogs.walkingtree.in/2015/06/30/nested-grid-in-sencha-ext-js

以上是关于在编辑主网格行时,rowBody 刷新丢失内部网格。 extjs 3..我可以重新渲染内部网格..吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将面板添加到 rowBody 中的 extjs 网格面板

在单元格编辑模式下,单击其他行时,不会更新kendo(可排序)网格值

剑道网格丢失选定的行

EXTJS 4.1,网格行体 tpl 上的事件监听器

如何根据Sencha ExtReact中网格的行数改变行背景颜色?

刷新后剑道网格单元重新聚焦