【问题标题】:How to prevent renderHeaderCell() call when column reorder is done by the user当用户完成列重新排序时如何防止 renderHeaderCell() 调用
【发布时间】: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() 调用?

任何解决方案/指针都会有很大帮助。
谢谢,

【问题讨论】:

    标签: javascript dojo dgrid


    【解决方案1】:

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

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

    不过,我还建议您保留对您在标题单元格中创建的任何小部件的引用,并扩展 _destroyColumns 以确保在重新呈现标题之前正确销毁您创建的任何小部件。

    【讨论】:

    • 谢谢肯。请建议任何可扩展的方法来保存和恢复每个 dgrid 列的表单值。因为我们的应用程序中有很多网格,我需要为其维护保存过滤器信息(表单值)。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2013-03-21
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多