2016-07-25 87 views
0

我正在构建一个JavaScript对象的jQuery数据表。表格没有问题。然后,在用户的输入上,我需要添加一行。这是我遇到问题的地方。我在Datatables.net和SO上研究过这个问题。我读过的所有内容都表明我所做的事情应该可行,但事实并非如此。没有行被添加。 DataTable初始化时,这是我的代码。无法添加行到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(); 

任何原因导致此操作无效的原因?我尝试过,到处搜索,找不到问题。

回答

1

doc on row.add()

如果一个数据结构被使用(即阵列或对象)它必须在相同的格式在表中的其他数据(即,如果你的表使用的物体,通过在这里有一个相同属性的对象!)。

您会注意到您的结构在几种方式上与初始结构不匹配。具体来说,您从一个对象开始并尝试添加一个数组,原始表中没有任何BfBu - 您将它们设为BFvalBUval - 并且缺少一些属性。 (我不知道add()方法是否会丢失与空白属性或不填;或许你可以尝试一下,看看。)

因此,首先,改变你的原始表从这个创建:

$("#partsList").DataTable({ //etc. 

这样:

var tbl = $("#partsList").DataTable({ //etc. 

然后摆脱这样的:

var tbl = $("#partsList").DataTable(); 

,并从此开始:

tbl.row.add({ //etc. 

并确保您的数据匹配。

+0

对..是的,不知道我最初错过了什么,但我做了..谢谢。 – trouble706

+0

我和@ annoyingmouse的观察之间,我相信你有一个解决方案。 :) – BobRodes

2

您添加一个数组,但表格期待一个对象。

+0

该文档另有说明... – BobRodes

+0

是的,我现在看到...我不知道我原来是如何错过它的,但是我做了。谢谢。 – trouble706

+0

我收回。文件确实说你需要匹配原件。我编辑了我的答案以反映这一点。 – BobRodes