Javascript 如何过滤dojo分类的treeGrid?
我有dojo treeGrid,它工作得很好。它显示按年度分类的成本项目。它还显示总数。但当我尝试按其中一列进行过滤时,它会弄乱网格(不正确地破坏类别和过滤记录)。我是否正确使用grid.filter?我需要保留分类结构,但删除/过滤某些记录。或者我应该以某种方式刷新jsonStoreJavascript 如何过滤dojo分类的treeGrid?,javascript,dojo,dojox.grid.datagrid,dojox.grid,Javascript,Dojo,Dojox.grid.datagrid,Dojox.grid,我有dojo treeGrid,它工作得很好。它显示按年度分类的成本项目。它还显示总数。但当我尝试按其中一列进行过滤时,它会弄乱网格(不正确地破坏类别和过滤记录)。我是否正确使用grid.filter?我需要保留分类结构,但删除/过滤某些记录。或者我应该以某种方式刷新jsonStore //HTML <div id="treeGrid"></div> <a href="javascript:void(0)"> <span id='button1
//HTML
<div id="treeGrid"></div>
<a href="javascript:void(0)">
<span id='button1'>Filter</span>
</a>
//JavaScript
var layout = [
{ cells: [
[ {field: "year", name: "Year"},
{field: "childItems",
children: [ { field: "status", name: "Status"},
{ field: "programname", name: "Program Name"},
{ field: "programcost", name: "Program Cost"}
],
aggregate: "sum"
}
]] } ]
var jsonStore = new dojo.data.ItemFileWriteStore({ url: "<........>"});
var grid = new dojox.grid.TreeGrid({
structure: layout,
store: jsonStore,
query: {type: 'year'},
queryOptions: {deep: true},
rowSelector: true,
openAtLevels: [false],
autoWidth: true,
autoHeight: true
},
dojo.byId("treeGrid"));
/* attach an event handler */
on(dom.byId("button1"),'click',
function(e){
grid.filter({status: "Approved"});
}
);
grid.startup();
dojo.connect(window, "onresize", grid, "resize");
/* sample data ======================================================
{
"identifier": "id",
"label": "name",
"items": [
{
"id": "2018",
"type": "year",
"year": "2018",
"childItems": [
{
"status": "Approved",
"programname": "Program 1",
"programcost": 100
},
{
"status": "Pending",
"programname": "Program 2",
"programcost": 200
}
]
},
{
"id": "2016",
"type": "year",
"year": "2016",
"childItems": [
{
"status": "Pending",
"programname": "Program 3",
"programcost": 300
}
]
}
]
}
*/
//HTML
//JavaScript
变量布局=[
{单元格:[
[{字段:“年”,名称:“年”},
{字段:“子项”,
子项:[{字段:“状态”,名称:“状态”},
{字段:“程序名”,名称:“程序名”},
{字段:“计划成本”,名称:“计划成本”}
],
合计:“总和”
}
]] } ]
var jsonStore=new dojo.data.ItemFileWriteStore({url::});
var grid=new dojox.grid.TreeGrid({
结构:布局,
门店:jsonStore,
查询:{type:'year'},
查询选项:{deep:true},
是的,
openAtLevels:[错误],
自动宽度:正确,
自动高度:真
},
dojo.byId(“treeGrid”);
/*附加事件处理程序*/
在(dom.byId(“button1”)上,单击,
职能(e){
过滤器({状态:“已批准”});
}
);
grid.startup();
connect(窗口,“onresize”,网格,“resize”);
/*样本数据======================================================
{
“标识符”:“id”,
“标签”:“名称”,
“项目”:[
{
“id”:“2018年”,
“类型”:“年份”,
“年份”:“2018年”,
“儿童项目”:[
{
“状态”:“已批准”,
“程序名”:“程序1”,
“项目成本”:100
},
{
“状态”:“待定”,
“程序名”:“程序2”,
“项目成本”:200
}
]
},
{
“id”:“2016年”,
“类型”:“年份”,
“年份”:“2016年”,
“儿童项目”:[
{
“状态”:“待定”,
“程序名”:“程序3”,
“项目成本”:300
}
]
}
]
}
*/
您能在示例中添加一些示例数据吗?只需将示例数据添加到最底部。谢谢你,Himanshua经过一个小时的反复尝试,我认为问题在于并不是所有的数据字段都有idAttribute
name
。我已经创建了一个小提琴,在其中过滤和改变商店(相关)是工作。您可能会注意到,我使用了model
作为store
和grid
之间的接口。为了改变商店,我创建了一个新模型并改变了模型。还要注意,grid.\u refresh()
没有任何效果。更改也会在没有它的情况下反映出来。很抱歉输入错误,idAttribute
是id
,而不是name
。