在 Handsontable 中使用 AJAX 的自定义单元格渲染无法进行计算
Calculation is not working with custom Cell Rendering with AJAX in Handsontable
在我的 table(Handsontable) 中我有四列 Cars, A, B 和 C。
Cars 和 A 列的数据从 MySQL 数据库加载。 (比如 PHP Demo)。
列 B 的数据通过 AJAX 从 MySQL 数据库填充,具体取决于 Cars 的值.代码如下:
{type: { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
Handsontable.TextCell.renderer.apply(this, arguments);
var cr,prc;
cr = instance.getDataAtCell(row, 0);
prc = instance.getDataAtCell(row, 1);
$.ajax({
url: "php/act-go-t.php",
data: {cars: cr, price: prc},
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result[0].tax === null) {
TD.innerHTML = '0.000';
}
else {
TD.innerHTML = res.result[0].tax;
}
},
error: function () {
TD.innerHTML = '0.000';
}
});
}}}
C列是A和B的SUM,代码为:
{type : { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
Handsontable.TextCell.renderer.apply(this, arguments);
var a,b;
a = instance.getDataAtCell(row, 1);
b = instance.getDataAtCell(row, 2);
TD.innerHTML = +a + +b;
}}}
问题是虽然在 B 中加载了值,但是加法不起作用。如果我将 B 列的类型设置为数字 ({type: numeric}
) 除了 AJAX,添加工作正常。
结果 AJAX:
+----------+------+-------+--------------+
| Cars | A | B | C |
+----------+------+-------+--------------+
| Nissan | 20 | 10 | 20 |
| Honda | 5 | 6 | 5 |
+----------+------+-------+--------------+
没有AJAX的结果:
+----------+------+-------+-------------+
| Cars | A | B | C |
+----------+------+-------+-------------+
| Nissan | 20 | 10 | 30 |
| Honda | 5 | 6 | 11 | -
+----------+------+-------+-------------+
谁能告诉我是否遗漏了什么?
在你的情况下TD.innerHTML = res.result[0].tax;
仅用于显示数据,但它不会将数据插入数据映射。
您可以尝试为该单元格设置一个 id
并通过 jquery 获取其值并将它们相加。所以代码看起来像这样:
{type: { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
var cr,prc;
cr = instance.getDataAtCell(row, 0);
prc = instance.getDataAtCell(row, 1);
$.ajax({
url: "php/act-go-t.php",
data: {cars: cr, price: prc},
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result[0].tax === null) {
TD.innerHTML = '0.000';
}
else {
TD.innerHTML = res.result[0].tax;
}
},
error: function () {
TD.innerHTML = '0.000';
}
});
arguments[5] = TD.innerHTML;
TD.id = row+'_'+col;
Handsontable.TextCell.renderer.apply(this, arguments);
}}}
和
{type : { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
Handsontable.TextCell.renderer.apply(this, arguments);
var a,b;
a = $('#'+row+'_1').text();
b = $('#'+row+'_2').text();
TD.innerHTML = +a + +b;
}}}
在我的 table(Handsontable) 中我有四列 Cars, A, B 和 C。 Cars 和 A 列的数据从 MySQL 数据库加载。 (比如 PHP Demo)。
列 B 的数据通过 AJAX 从 MySQL 数据库填充,具体取决于 Cars 的值.代码如下:
{type: { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
Handsontable.TextCell.renderer.apply(this, arguments);
var cr,prc;
cr = instance.getDataAtCell(row, 0);
prc = instance.getDataAtCell(row, 1);
$.ajax({
url: "php/act-go-t.php",
data: {cars: cr, price: prc},
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result[0].tax === null) {
TD.innerHTML = '0.000';
}
else {
TD.innerHTML = res.result[0].tax;
}
},
error: function () {
TD.innerHTML = '0.000';
}
});
}}}
C列是A和B的SUM,代码为:
{type : { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
Handsontable.TextCell.renderer.apply(this, arguments);
var a,b;
a = instance.getDataAtCell(row, 1);
b = instance.getDataAtCell(row, 2);
TD.innerHTML = +a + +b;
}}}
问题是虽然在 B 中加载了值,但是加法不起作用。如果我将 B 列的类型设置为数字 ({type: numeric}
) 除了 AJAX,添加工作正常。
结果 AJAX:
+----------+------+-------+--------------+ | Cars | A | B | C | +----------+------+-------+--------------+ | Nissan | 20 | 10 | 20 | | Honda | 5 | 6 | 5 | +----------+------+-------+--------------+
没有AJAX的结果:
+----------+------+-------+-------------+ | Cars | A | B | C | +----------+------+-------+-------------+ | Nissan | 20 | 10 | 30 | | Honda | 5 | 6 | 11 | - +----------+------+-------+-------------+
谁能告诉我是否遗漏了什么?
在你的情况下TD.innerHTML = res.result[0].tax;
仅用于显示数据,但它不会将数据插入数据映射。
您可以尝试为该单元格设置一个 id
并通过 jquery 获取其值并将它们相加。所以代码看起来像这样:
{type: { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
var cr,prc;
cr = instance.getDataAtCell(row, 0);
prc = instance.getDataAtCell(row, 1);
$.ajax({
url: "php/act-go-t.php",
data: {cars: cr, price: prc},
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result[0].tax === null) {
TD.innerHTML = '0.000';
}
else {
TD.innerHTML = res.result[0].tax;
}
},
error: function () {
TD.innerHTML = '0.000';
}
});
arguments[5] = TD.innerHTML;
TD.id = row+'_'+col;
Handsontable.TextCell.renderer.apply(this, arguments);
}}}
和
{type : { renderer : function (instance, TD, row, col, prop, value, cellProperties) {
Handsontable.TextCell.renderer.apply(this, arguments);
var a,b;
a = $('#'+row+'_1').text();
b = $('#'+row+'_2').text();
TD.innerHTML = +a + +b;
}}}