我有一个带有以下声明的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()
调用?
任何解决方案/指针都会有很大帮助 谢谢,
答案 0 :(得分:1)
重新排序列时,dgrid会更新网格结构,导致重新调用renderHeader
,从而导致renderHeaderCell
被重新调用。
您需要在内部维护小部件的状态并自行恢复。如果您正在使用Dijit输入小部件,那么您可能需要考虑使用dijit/form/Form
而不是直接使用HTML表单元素,因为您可以随后观察value
更改并相应地更新状态信息。
_destroyColumns
以确保在重新呈现标头之前正确销毁您创建的所有窗口小部件。