使用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);
}
}
});
但是,一旦更新了值,自定义样式就不会立即应用于行。例如,当一行的文本颜色应更改为黑色时,它仍保持绿色。
一旦与网格交互(例如对列进行排序),行颜色就会更新为正确的颜色。
有没有任何方法可以在调用存储获取函数后直接触发网格行的正确自定义样式?
如果我的问题有点长篇大论,我很抱歉-我只是想试着充分解释一下这个问题:)
您不需要在行上循环!您可以使用"格式化程序"&定义布局"galayout"时的"styles"属性。。。看看这个:
function getExtImg(valueOfColumn) { // Do something with the value... return valueOfColumn+'do something with it'; }
var layout=[[{'name':'Ext','field':'extension',格式化程序:getExtImg,样式:'添加:0px;'},
{‘name’:‘Filename’,‘field’:‘documentName’,width:‘auto’}]];
//将此布局添加到网格中。。。
您指定的格式化程序函数是为每一行调用的!还有您在样式属性下指定的样式。
我想这会帮你解决问题的!
为了能够在格式化程序中更改行样式,请设置一个格式化程序函数,如下所示:
格式化程序:函数(val,rowIdx,cell){classes=compute_classes(val,rowIdx,cell);cell.customClasses.push(classes);}
来源:如何在Dojo数据网格中有条件地设置单元格样式?
正如see应该很容易看到的那样,您可以使用push函数将类添加到当前行!
Lucian