Slickgrid GetItemMetadata 函数只引用最后一项 #563
Slickgrid GetItemMetadata function refers only to the last item #563
我正在尝试使用以下代码块更改多行的样式:
DV.getItemMetadata = function (row) {
let description = this.getItem(row).Description;
if (description != null) {
return {
cssClasses: 'notify'
};
}
return null;
};
在这里我可以看到所有元素都正确完成了,但只有最后一个元素是彩色的。
我不确切知道你的问题是什么,但我向你展示了适合我的代码,请注意它是用 ES6 (TypeScript) 语法编写的,如果你可能需要稍微更改一下想保留 ES5 语法。
我工作的例子有这段代码
/** Change the Duration Rows Background Color */
changeDurationBackgroundColor() {
this.dataView.getItemMetadata = this.updateItemMetadataForDurationOver40(this.dataView.getItemMetadata);
// also re-render the grid for the styling to be applied right away
this.grid.invalidate();
this.grid.render();
}
/**
* Change the SlickGrid Item Metadata, we will add a CSS class on all rows with a Duration over 50
* For more info, you can see this SO
*/
updateItemMetadataForDurationOver50(previousItemMetadata: any) {
const newCssClass = 'duration-bg';
return (rowNumber: number) => {
const item = this.dataView.getItem(rowNumber);
let meta = {
cssClasses: ''
};
if (typeof previousItemMetadata === 'object') {
meta = previousItemMetadata(rowNumber);
}
if (meta && item && item.duration) {
const duration = +item.duration; // convert to number
if (duration > 50) {
meta.cssClasses = (meta.cssClasses || '') + ' ' + newCssClass;
}
}
return meta;
};
}
然后,一旦您通过单击按钮调用 changeDurationBackgroundColor()
,它会更改持续时间超过 50 的每一行的背景颜色。
你也可以自己试试,这里是直播Demo
希望这可以帮助您找到问题,元数据更改后您可能会丢失 grid.invalidate()
?
我正在尝试使用以下代码块更改多行的样式:
DV.getItemMetadata = function (row) {
let description = this.getItem(row).Description;
if (description != null) {
return {
cssClasses: 'notify'
};
}
return null;
};
在这里我可以看到所有元素都正确完成了,但只有最后一个元素是彩色的。
我不确切知道你的问题是什么,但我向你展示了适合我的代码,请注意它是用 ES6 (TypeScript) 语法编写的,如果你可能需要稍微更改一下想保留 ES5 语法。
我工作的例子有这段代码
/** Change the Duration Rows Background Color */
changeDurationBackgroundColor() {
this.dataView.getItemMetadata = this.updateItemMetadataForDurationOver40(this.dataView.getItemMetadata);
// also re-render the grid for the styling to be applied right away
this.grid.invalidate();
this.grid.render();
}
/**
* Change the SlickGrid Item Metadata, we will add a CSS class on all rows with a Duration over 50
* For more info, you can see this SO
*/
updateItemMetadataForDurationOver50(previousItemMetadata: any) {
const newCssClass = 'duration-bg';
return (rowNumber: number) => {
const item = this.dataView.getItem(rowNumber);
let meta = {
cssClasses: ''
};
if (typeof previousItemMetadata === 'object') {
meta = previousItemMetadata(rowNumber);
}
if (meta && item && item.duration) {
const duration = +item.duration; // convert to number
if (duration > 50) {
meta.cssClasses = (meta.cssClasses || '') + ' ' + newCssClass;
}
}
return meta;
};
}
然后,一旦您通过单击按钮调用 changeDurationBackgroundColor()
,它会更改持续时间超过 50 的每一行的背景颜色。
你也可以自己试试,这里是直播Demo
希望这可以帮助您找到问题,元数据更改后您可能会丢失 grid.invalidate()
?