我正在使用JavaScript对象构建一个jquery数据表。表格很好。然后,在用户的输入上,我需要添加一行。这是我遇到问题的地方。我在Datatables.net和SO上研究了这个。我读过的所有内容都表明我正在做的事情应该有效,但事实并非如此。没有添加行。这是我初始化DataTable时的代码。
$("#partsList").DataTable({
data: data,
"order": [[1, "asc"]],
"scrollY": "800px",
"scrollCollapse": true,
"paging": false,
columns: [
{sTitle: "InvtId", data: "invtid", "defaultContent": '', 'className': 'invtId'},
{sTitle: "Line Nbr", data: "linenbr", 'className': 'lineNbr', "defaultContent": 'TEST'},
{sTitle: "BF", data: "BFval", "defaultContent": ''},
{sTitle: "BU", data: "BUval", "defaultContent": ''},
{sTitle: "CnvFact", data: "cnvfact"},
{sTitle: "Origin", data: "origin"},
{sTitle: "Line Tot", data: "linetot"},
{sTitle: "Description", data: "descr"},
{sTitle: "Quantity Ordered", data: "ordqty"},
{sTitle: "Quantity Ship", data: "qtyship"},
{sTitle: "Unit", data: "unitdesc"},
{sTitle: "Sales Price", data: "slsprice"},
{sTitle: "Wood Cost", data: "wood"},
{sTitle: "Treatment Cost", data: "treat"},
{sTitle: "Adjustments", data: "trtadj"},
{sTitle: "Misc", data: "misc"},
{sTitle: "Freight", data: "freight"}
]
});
然后,在用户输入后,我正在收集数据。这是传递数据以添加新行的示例。这不是整个对象。只是想确保这一点很清楚。所有领域都是合格的。
Object {invtid: "APGC1DBTR061008", Bf: 880, Bu: 0.88, linenbr: 66536, cnvfact: 0, Adj: "-45"Bf: 880, Freight: "22"}
这是我添加新行的代码。我正在使用变量名称数据...
将数据传递给方法var tbl = $("#partsList").DataTable();
tbl.row.add([
data.invtid,
data.linenbr,
data.Bf,
data.Bu,
data.cnvfact,
data.origin
]).draw();
为什么这不起作用?我在各地试过试过,无法找到问题。
答案 0 :(得分:2)
您添加了一个数组,但该表期待一个对象。
答案 1 :(得分:1)
如果使用数据结构(即数组或对象),则它必须与表中的其他数据具有相同的格式(即,如果表使用对象,则在此处传入具有相同属性的对象!)。< / p>
您会注意到您的结构在几个方面与初始结构不匹配。具体来说,您从一个对象开始并尝试添加一个数组,原始表中没有任何Bf
或Bu
- 您将它们设为BFval
和{{ 1}} - 并且缺少许多属性。 (我不知道BUval
方法是否会用空白填充缺失的属性;也许你可以尝试一下看看。)
首先,从此处更改原始表:
add()
到此:
$("#partsList").DataTable({ //etc.
然后摆脱这个:
var tbl = $("#partsList").DataTable({ //etc.
刚开始:
var tbl = $("#partsList").DataTable();
确保您的数据匹配。