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

时间:2015-02-05 18:27:07

标签: javascript dojo dgrid

我有一个带有以下声明的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 个答案:

答案 0 :(得分:1)

重新排序列时,dgrid会更新网格结构,导致重新调用renderHeader,从而导致renderHeaderCell被重新调用。

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

但是,我还建议您保持对标题单元格中创建的任何窗口小部件的引用,并扩展_destroyColumns以确保在重新呈现标头之前正确销毁您创建的所有窗口小部件。