当用户完成列重新排序时如何防止 renderHeaderCell() 调用

How to prevent renderHeaderCell() call when column reorder is done by the user

我有一个带有以下声明的 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() 方法为每个 header 添加了一个过滤表单(上面的例子 "xyz")当我点击 [=27] 中的按钮时弹出=]. 一切正常,但是当我执行 re-order 列时,renderHeaderCell() 块中的表单(具有文本框、单选按钮等小部件)会自动重置并再次绘制。 因此,我无法在表格中保留显示我在特定列上应用了哪些过滤器所需的值。

如何在用户完成 column-reorder 时阻止 renderHeaderCell() 调用?

任何 solution/pointers 都会有很大帮助。
谢谢,

当列重新排序时,dgrid 更新网格结构,导致 renderHeader 变为 re-called,进而导致 renderHeaderCell 也变为 re-called .

您将需要在内部维护小部件的状态并自行恢复它们。如果您正在使用 Dijit 输入小部件,那么您可能需要考虑使用 dijit/form/Form 而不是直接使用 HTML 表单元素,因为您随后可以观察 value 的变化并相应地更新状态信息.

不过,我还建议您保留对您在 header 单元格中创建的任何小部件的引用,并扩展 _destroyColumns 以确保您创建的任何小部件在header 是 re-rendered.