ExtJs分组条件
下面的代码采用了一个数据存储,该存储设计用于在平面视图中保存windows注册表项(我不想要树状视图) 键列用于分组,扩展键后可以查看该键下的所有值。这些值根据获得的评分(外部)进行着色,评分存储在“结果”字段中 我的问题 我希望仅当键的所有值的分数都大于0.0时才折叠该键,否则必须展开该键 我如何/在何处实施ITER对各组的逻辑,并决定是否将其折叠/扩展 谢谢ExtJs分组条件,extjs,grid,conditional-statements,expand,collapse,Extjs,Grid,Conditional Statements,Expand,Collapse,下面的代码采用了一个数据存储,该存储设计用于在平面视图中保存windows注册表项(我不想要树状视图) 键列用于分组,扩展键后可以查看该键下的所有值。这些值根据获得的评分(外部)进行着色,评分存储在“结果”字段中 我的问题 我希望仅当键的所有值的分数都大于0.0时才折叠该键,否则必须展开该键 我如何/在何处实施ITER对各组的逻辑,并决定是否将其折叠/扩展 谢谢 Ext.onReady (function () { var store = Ext.create('Ext.data.Store',
Ext.onReady (function () {
var store = Ext.create('Ext.data.Store', {
storeId:'registryStore',
// model
fields:['result', 'key', 'type','value','data'],
// enable grouping for the data Store
groupField: 'key',
// the data itself in JSON format
data: {'regkeys':[.....data...]},
// define the JSON data type
proxy: {
type: 'memory',
reader: {
type: 'json',
root: 'regkeys'
}
}
});
// grouping
var grouping = Ext.create('Ext.grid.feature.Grouping',{
startCollapsed: true,
});
var regPanel = Ext.create('Ext.grid.Panel', {
title: 'Registry',
renderTo: Ext.getBody(),
// link to grouping object
features: [grouping],
store: Ext.data.StoreManager.lookup('registryStore'),
// model
columns: [
{ header: 'Result', dataIndex: 'result'},
{ header: 'Type', dataIndex: 'type' },
{ header: 'Value', dataIndex: 'value', width:250,felx:1},
{ header: 'Data', dataIndex: 'data', flex:1}
],
// color's each row according to score
viewConfig: {
getRowClass: function(record, rowIndex, rowParams, store) {
if (record.get("result") == 0.0) { // orange background
return 'row-unknown';
}
else if (record.get("result") < 0.0) { // red background
return 'row-bad';
}
return 'row-good'; // green background
}
},
// collapse/expand all botton
tbar: [{
text: 'collapse all',
handler: function (btn) {
grouping.collapseAll();
}
},{
text: 'expand all',
handler: function (btn) {
grouping.expandAll();
}
}],
}); //Ext.create
}); //Ext.onReady
Ext.onReady(函数(){
var store=Ext.create('Ext.data.store'{
storeId:'registryStore',
//模型
字段:[“结果”、“键”、“类型”、“值”、“数据”],
//为数据存储启用分组
groupField:'key',
//数据本身是JSON格式的
数据:{'regkeys':[..数据…]},
//定义JSON数据类型
代理:{
键入:“内存”,
读者:{
键入:“json”,
根:'regkeys'
}
}
});
//分组
var grouping=Ext.create('Ext.grid.feature.grouping'{
startCollapsed:是的,
});
var regPanel=Ext.create('Ext.grid.Panel'{
标题:“注册表”,
renderTo:Ext.getBody(),
//链接到分组对象
特征:[分组],
存储:Ext.data.StoreManager.lookup('registryStore'),
//模型
栏目:[
{标题:'Result',数据索引:'Result'},
{头:'Type',数据索引:'Type'},
{header:'Value',dataIndex:'Value',width:250,felx:1},
{header:'Data',dataIndex:'Data',flex:1}
],
//每行的颜色根据分数而定
视图配置:{
getRowClass:函数(记录、行索引、行参数、存储){
如果(record.get(“result”)==0.0){//橙色背景
返回“行未知”;
}
else如果(record.get(“result”)<0.0){//红色背景
返回“row bad”;
}
返回“row good”;//绿色背景
}
},
//折叠/扩展所有botton
待定:[{
文本:“全部折叠”,
处理程序:函数(btn){
分组:collapseAll();
}
},{
文本:“全部展开”,
处理程序:函数(btn){
grouping.expandAll();
}
}],
});//Ext.create
}); //分机onReady
我找到了答案,这是非常粗糙的,因为ExtJS不能在网格渲染之前编辑分组状态,因此我们需要在网格处理之后进行渲染。
我在Ext.Grid.Panel的代码中添加了以下代码:
listeners: {
'afterrender' : function(grid) {
setTimeout(function(){
var groups = store.getGroups();
var gLen = groups.length;
for (i = 0; i < gLen; i++) {
// expand the group if at least one childs result <= 0.0
for (j = 0; j < groups[i].children.length; j++ ){
if (groups[i].children[j].data["result"] <= 0.0) {
//console.log(groups[i].name);
grouping.expand(groups[i].name, false);
break; // no need to continue checking.
}
}
}
});
}
},//listeners
侦听器:{
“afterrender”:函数(网格){
setTimeout(函数(){
var groups=store.getGroups();
var gLen=组长度;
对于(i=0;i