2

使用 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);
});

在使用 store fetch 功能的页面/网格加载(通过用户交互)之后,我有了一些功能。它遍历我的网格存储的行并根据用户输入更改单元格的值。同样,这工作正常,网格中的值已正确更新。代码如下。

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);
}
}
});

但是,一旦更新了值,自定义样式不会立即应用于行。例如,一行的文本颜色在应该变为黑色时保持绿色。

一旦与网格交互(例如,对列进行排序),行颜色就会更新为正确的颜色。

有什么方法可以在调用 store fetch 函数后直接触发网格行的正确自定义样式?

抱歉,如果我的问题有点啰嗦-只是想我会尝试充分解释这个问题:)

4

1 回答 1

1

你不需要遍历行!您可以在定义布局“galayout”时使用“formatter”和“styles”属性......看看:

function getExtImg(valueOfColumn) { // Do something with the value...
  return valueOfColumn+'do something with it';
}

var layout = [[ {'name': 'Ext', 'field': 'extension', formatter : getExtImg , styles:'padding:0px;'},

{'name': '文件名', 'field': 'documentName', width: 'auto'}]];

// 将此布局添加到您的网格...

您指定为格式化程序函数的内容会为每一行调用!还有您在样式属性下指定的样式。

我认为这将帮助您解决问题!

为了能够在格式化程序中更改行样式,请设置如下格式化程序函数:

formatter:function(val, rowIdx, cell) { classes = compute_classes(val, rowIdx, cell); cell.customClasses.push(classes); }

资料来源: 如何有条件地设置 Dojo 数据网格中的单元格样式?

正如所见应该很容易看到,您可以使用 push 函数将类添加到当前行!

卢西安

于 2013-02-12T07:42:20.763 回答