使用Dojo我设置了一个链接到数据存储的网格。在网格加载之后,我有一个连接函数,它循环遍历行并根据单元格的值设置行文本颜色。这很好用(下面复制的代码)。
var gagrid = new dojox.grid.EnhancedGrid({
query: {
Keyword: '*'
},
store: gastore,
structure: galayout,
escapeHTMLInData: false,
plugins: {
nestedSorting: true
}
},
document.createElement('div'));
dojo.connect(gagrid, 'onStyleRow', this, function(row) {
var item = gagrid.getItem(row.index);
if (item) {
var value = gagrid.store.getValue(item, "Performance", null);
if (value == 3) {
row.customStyles += "color: green;";
} else if (value == 2) {
row.customStyles += "color: red;";
}
}
gagrid.focus.styleRow(row);
gagrid.edit.styleRow(row);
});
我在页面/网格加载(通过用户交互)后使用了存储获取功能,从而获得了功能。它循环遍历网格存储的行,并根据用户输入更改单元格的值。再次,这工作正常,网格中的值正确更新。代码如下。
gastore.fetch({
query: {Keyword: '*'},
onComplete: function(items, request){
var i;
for (i = 0; i < items.length; i++) {
var item = items[i];
var performance;
if(parseInt(items[i]["Visits"])>=rp)
{
if(parseInt(items[i]["Bounce"])<=rb&&parseInt(items[i]["Time"])>=rmp)
{
performance=3;
}
else
{
performance=2;
}
}
else
{
performance=1;
}
gastore.setValue(item,"Performance",performance);
}
}
});
但是,一旦更新了值,自定义样式就不会立即应用于行。例如,当行变为黑色时,行的文本颜色保持为绿色。
一旦网格与(例如,对列进行排序)进行交互,行颜色就会更新为正确的颜色。
在调用商店提取功能后,有没有办法直接触发网格行的正确自定义样式?
道歉,如果我的问题长期啰嗦 - 只是想我会尝试完全解释这个问题:)
答案 0 :(得分:1)
你不需要遍历行!你可以使用“格式化程序”&amp;定义布局“galayout”时的“styles”属性...... 看一看:
function getExtImg(valueOfColumn) { // Do something with the value... return valueOfColumn+'do something with it'; }
var layout = [[{'name':'Ext','field':'extension', formatter : getExtImg ,样式:'padding:0px;'},
{'name':'Filename','field':'documentName',width:'auto'}]];
//将此布局添加到您的网格中......
您指定的格式化程序函数是每行调用的!您还在styles属性下指定的样式。
我认为这可以帮助您解决问题!
为了能够在格式化程序中更改行样式,请设置格式化程序函数,如下所示:
formatter:function(val,rowIdx,cell){ classes = compute_classes(val,rowIdx,cell); cell.customClasses.push(类); }
来源: How do you conditionally style a cell in a Dojo data grid?
如您所见,您可以使用push函数将类添加到当前行!
卢西恩