当用户完成列重新排序时如何防止 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.
我有一个带有以下声明的 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.