在编辑主网格行时,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(可排序)网格值