当用户完成列重新排序时如何防止 renderHeaderCell() 调用
Posted
技术标签:
【中文标题】当用户完成列重新排序时如何防止 renderHeaderCell() 调用【英文标题】:How to prevent renderHeaderCell() call when column reorder is done by the user 【发布时间】:2015-02-05 18:27:07 【问题描述】:我有一个带有以下声明的 Dojo 扩展 dgrid:
var myGridTemplate = declare([ OnDemandGrid,ColumnReorder,Keyboard,Selection,selector,Pagination,ColumnResiser]);
var myGrid = new myGridTemplate(
deselectOnRefresh : true,
cellNavigation : true,
loadingMessage : "Loading data...",
noDataMessage : "No data found.",
columns :
xyz :
label : Mylabel,
width : 50,
renderHeaderCell: function(col_node)
col_field = "xyz";
this_filter_col = this;
domConstruct.create("div",
innerhtml: this_filter_col.label,
intermediateChanges: true
, col_node);
.
var form = new Form(style: "font-size: 11px");
.
var tc = new TabContainer(
style: "height: 220px; width: 300px;",
useMenu : false,
useSlider : false,
tabStrip : false,
tabPosition: "top",
doLayout : true
);
tc.placeAt(form.domNode);
var cp = new ContentPane(
region: "top",
style: "padding: 5px; border-bottom: none;" );
.
.
.
.
);
在上面的代码中,Renderheadcell()
方法为每个标题添加了一个过滤表单(上面的示例“xyz”),当我单击标题中存在的按钮时会弹出一个过滤表单。
一切正常,但是当我对列重新排序时,renderHeaderCell()
块中存在的表单(具有文本框、单选按钮等小部件)会自动重置并再次绘制。
因此,我无法在表单中保留显示我在特定列上应用了哪些过滤器所需的值。
当用户完成列重新排序时,如何防止renderHeaderCell()
调用?
任何解决方案/指针都会有很大帮助。 谢谢,
【问题讨论】:
【参考方案1】:当列重新排序时,dgrid 会更新网格的结构,从而导致renderHeader
被重新调用,进而导致renderHeaderCell
也被重新调用。
您需要在内部维护小部件的状态并自行恢复它们。如果您使用 Dijit 输入小部件,那么您可能需要考虑使用 dijit/form/Form
而不是直接使用 HTML 表单元素,因为您可以观察 value
的更改并相应地更新状态信息。
不过,我还建议您保留对您在标题单元格中创建的任何小部件的引用,并扩展 _destroyColumns
以确保在重新呈现标题之前正确销毁您创建的任何小部件。
【讨论】:
谢谢肯。请建议任何可扩展的方法来保存和恢复每个 dgrid 列的表单值。因为我们的应用程序中有很多网格,我需要为其维护保存过滤器信息(表单值)。以上是关于当用户完成列重新排序时如何防止 renderHeaderCell() 调用的主要内容,如果未能解决你的问题,请参考以下文章
当用户点击地址栏输入使用 JQuery 或 JS 时,如何防止网页重新加载