我有一个 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()
block 中存在的表单(具有文本框、单选按钮等小部件)将自动重置并再次绘制。
因此,我无法保留表单中显示我在特定列上应用的过滤器所需的值。
当用户完成列重新排序时,如何阻止 renderHeaderCell()
调用?
任何解决方案/指针都会有很大帮助。
谢谢,
最佳答案
当列重新排序时,dgrid 会更新网格的结构,从而导致 renderHeader
被重新调用,进而导致 renderHeaderCell
也被重新调用.
您需要在内部维护小部件的状态并自行恢复它们。如果您使用 Dijit 输入小部件,那么您可能需要考虑使用 dijit/form/Form
而不是直接使用 HTML 表单元素,因为您可以查看 value
更改并相应更新状态信息。
不过,我还建议您保留对在标题单元格中创建的任何小部件的引用,并扩展 _destroyColumns
以确保您创建的任何小部件在重新标题之前被正确销毁。 -渲染。
关于javascript - 当用户完成列重新排序时如何防止 renderHeaderCell() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351368/