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

标签 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() block 中存在的表单(具有文本框、单选按钮等小部件)将自动重置并再次绘制。 因此,我无法保留表单中显示我在特定列上应用的过滤器所需的值。

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

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

最佳答案

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

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

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

关于javascript - 当用户完成列重新排序时如何防止 renderHeaderCell() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351368/

相关文章:

javascript - 软键盘 Android PhoneGap 构建问题

javascript - 如何在更改事件时更改下拉列表的值?

javascript - OnClick事件调用js函数和回调函数

javascript - 如何使用 dojo 方面调用常规 JavaScript 函数

javascript - 如何运行 data-dojo-attach-event?

javascript - 如何动态设置store dojo dgrid?

javascript - 如何设置 dgrid 中列内容的样式,而不是列标题?

javascript - PhantomJS 错误处理

jquery - jquery ui 对话框后面的 dijit datetextbox

javascript - Dojo:TypeError:marketStore.query 不是函数