gpt4 book ai didi

javascript - 为什么自定义渲染器不能按预期工作并导致奇怪的表格单元格行为?

转载 作者:行者123 更新时间:2023-11-30 18:01:28 24 4
gpt4 key购买 nike

为什么我的自定义渲染器会在 handsontable 中导致奇怪的单元格行为?当我尝试编辑单元格时,光标会自动向下移动到其他单元格,而其他单元格则乱七八糟,整个编辑过程从那一刻起就崩溃了。

我需要根据值给一些单元格着色,这就是我需要使用某种机制的原因,我选择了这样在列定义中定义类型:

columns: { data: "some-property", type: {renderer: colorRenderer, editor:colorRenderer}}

不幸的是,当我这样做时,单元格编辑过程中会出现一些奇怪的行为。请在这里查看 jsfiddle:http://jsfiddle.net/6QEtF/3/行:191 是有问题的问题。

如何在不使用渲染器的情况下以其他方式为单元格着色,或者我的渲染器有什么问题?

请帮忙...

这是我的示例代码,完全可以在 JsFiddle 上运行(上面的链接)。

var COLUMN_TYPES = new Object();

// JSON fetched via Ajax from backend:
var res = getJSON();

// Create grid header names and definitions based on fetched JSON:
var column_names = [];
var column_defs = [];
for (var i=0; i<res.headers.length; i++) {
column_names[i] = res.headers[i].name;
column_defs[i] = {
data: "valueDTO." + i + ".value",
type: {renderer: colorRenderer, editor:colorEditor}, // 1 way <--- cause a problem!
//type: res.headers[i].type, // 2nd way is correct but without custom renderer which I need to colorize some cells.
source: res.headers[i].sources,
readOnly: res.headers[i].readOnly,
strict: res.headers[i].strict
};
COLUMN_TYPES["valueDTO."+i+".value"] = res.headers[i].type;
}

// Create grid table:
createHandsontable(res.rows, column_names, column_defs, res.values);

function createHandsontable(row_names, column_names, column_defs, values) {
var $container = $("#spreadsheet");
var $parent = $container.parent();
$container.handsontable({
startRows: 4,
startCols: 20,
manualColumnResize: true,
manualColumnMove: true,
columnSorting: true,
contextMenu: true,
rowHeaders: row_names,
colHeaders: column_names, //grid.headers,
data: values, // data init only once at start
columns: column_defs,
cells: function (row, col, prop) {
//return {type: {renderer: colorRenderer, editor: colorEditor}};
}
});
}

function colorRenderer (instance, td, row, col, prop, value, cellProperties) {
switch (COLUMN_TYPES[prop]) {
case 'text':
Handsontable.TextCell.renderer.apply(this, arguments);
Handsontable.TextCell.editor.apply(this, arguments);
if (value != null) {
if (value.toString().toLowerCase() === "green") {
$(td).css({
background: '#00DC00'
});
}
else if (value.toString().toLowerCase() === "amber") {
$(td).css({
background: '#FAE600'
});
}
else if (value.toString().toLowerCase() === "red") {
$(td).css({
background: 'red'
});
}
}
break;
case 'autocomplete':
Handsontable.AutocompleteCell.renderer.apply(this, arguments);
Handsontable.AutocompleteCell.editor.apply(this, arguments);
break;
case 'checkbox':
Handsontable.CheckboxCell.renderer.apply(this, arguments);
Handsontable.CheckboxCell.editor.apply(this, arguments);
break;
case 'numeric':
Handsontable.NumericCell.renderer.apply(this, arguments);
Handsontable.NumericCell.editor.apply(this, arguments);
break;
case 'date':
Handsontable.DateCell.renderer.apply(this, arguments);
Handsontable.DateCell.editor.apply(this, arguments);
break;
case 'handsontable':
Handsontable.HandsontableCell.renderer.apply(this, arguments);
Handsontable.HandsontableCell.editor.apply(this, arguments);
break;
default:
Handsontable.TextCell.renderer.apply(this, arguments);
Handsontable.TextCell.editor.apply(this, arguments);
break;
}
};

function colorEditor (instance, td, row, col, prop, value, cellProperties) {
switch (COLUMN_TYPES[prop]) {
case 'text':
Handsontable.TextCell.renderer.apply(this, arguments);
Handsontable.TextCell.editor.apply(this, arguments);
break;
case 'autocomplete':
Handsontable.AutocompleteCell.renderer.apply(this, arguments);
Handsontable.AutocompleteCell.editor.apply(this, arguments);
break;
case 'checkbox':
Handsontable.CheckboxCell.renderer.apply(this, arguments);
Handsontable.CheckboxCell.editor.apply(this, arguments);
break;
case 'numeric':
Handsontable.NumericCell.renderer.apply(this, arguments);
Handsontable.NumericCell.editor.apply(this, arguments);
break;
case 'date':
Handsontable.DateCell.renderer.apply(this, arguments);
Handsontable.DateCell.editor.apply(this, arguments);
break;
case 'handsontable':
Handsontable.HandsontableCell.renderer.apply(this, arguments);
Handsontable.HandsontableCell.editor.apply(this, arguments);
break;
default:
Handsontable.TextCell.renderer.apply(this, arguments);
Handsontable.TextCell.editor.apply(this, arguments);
break;
}
};

最佳答案

尝试升级到 latest version :

http://handsontable.com/

看看conditional formatting

关于javascript - 为什么自定义渲染器不能按预期工作并导致奇怪的表格单元格行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16870280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com