我创建了一个dojo数据网格。每列都附有一个格式化程序。生成网格时,将调用格式化程序。现在我想要它,这样如果用户选择任何行,将调用格式化程序,并且某些字符串应该附加到所选行的列元素。
像网格一样:
COLUMN
-------
a
b
c
现在用户选择第二行,网格应更改为:
COLUMN
-------
a
b SELECTED
c
目前我实现了这样:
if(this.grid.selection.selectedIndex !== -1){
retrun value + "SELECTED";
}else{
return value;
}
你能建议一个好方法吗?请注意,不应将“SELECTED”字符串添加到网格存储区。
答案 0 :(得分:0)
格式化不会挂钩到单击/选择行。仅在设置单元格的内容(值)时执行。相反,您需要将焦点移至onRowClicked - 网格组件上的事件。它的工作原理如下:
grid.onRowClick = onRowClickHandler;
我不知道以下哪些样本会让您最接近您的目标,但onRowClickHandler可以设置为:
function onRowClickHandler(evt) {
var rows = this.selection.getSelected();
// perform cell rendering here
dojo.forEach(rows, function(row) {
// this row is an item though.. you will have row._O as its index
});
}
OR
function onRowClickHandler(e) {
var cellClicked = this.focus.cell
cellClicked.formatter();
}
但是,您可能会发现在网格组件中的任何位置都没有太多对可查看数据的引用。您可以使用以下查询选择器来查找单元格数据,并通过在每个值上调用formatter来更新查看的html。您需要捕获以前的选择,以便对您的自定义值设置进行“拆解”。
var prevSelectedRows = [];
function onRowClickHandler(evt) {
var idx = this.selection.selectedIndex,
rawRow = dojo.query(".dojoxGridRow:nth-child("+(idx+1)+")", this.domNode)[0],
self = this;
// perform resetting of viewable values
dojo.forEach(prevSelectedRows, function(raw) {
dojo.query('.dojoxGridCell', raw).forEach(function(cellDOM, i) {
cellDOM.innerHTML = cellDOM.innerHTML.replace("SELECTED", "");
});
});
prevSelectedRows = []; // reset prev selection
// look into grid.view.content for methods on this
// perform setting of viewable values (SELECTED)
dojo.query('.dojoxGridCell', rawRow).forEach(function(cellDOM, i) {
// this function might be of interest, lets see how it looks in console
console.log(self.layout.cells[i].formatter);
cellDOM.innerHTML = cellDOM.innerHTML + "SELECTED"
});
prevSelectedRows.push(rawRow);
}