如何序列化Webix数据表

时间:2017-06-14 09:01:38

标签: datatable webix

我的webix数据表有100行。现在,假设当我在特定列上应用过滤器时,数据表大小会减少并呈现10个匹配的行。

我使用serialize()将整个表数据转换为JSON对象,如下所示:

var data = {};
var $$mytab = $$('myDataTable');
data = $$mytab.serialize();

现在,问题是,当整个表被过滤并且在总共100行中只显示10行时,serialize()只向数据对象提供了10行而不是100行。

有没有办法,我总是可以序列化整个数据表(在这种情况下是100行),不论它是显示过滤数据还是整个表?

实施解决方案后......

当我在浏览器控制台中打印它们时,它在两种情况下都给了我相同的数组。格式略有不同。

使用您的解决方案,它在浏览器控制台上提供以下输出:

(2)[1497258960089,1497258960162]

和我一起,如下面的详细值,如果我展开(>)输出,我可以查看它们:

(2)> [对象,对象]

早些时候,当我使用序列化时,整个结构(及其值)被保存到数组中。因此,稍后我可以在其上迭代循环并使用'in'运算符进行匹配以删除值。

请考虑以下代码:

mydata = {};

mydata.employee = $$mytab.serialize();

console.log(JSON.stringify(mydata.employee);

for (var i = 0; i < mydata["employee"].length; i++) {
    if("salary" in mydata["employee"][i]) {
        delete mydata["employee"][i]["salary"];
    }
}

在上面的代码中,当我在mydata.employee上执行console.log时,我得到以下输出:

[{"name":"mark", "company":"abcd", "salary":"100"},{"name":"smith", "company":"pqrs", "salary":"200"}]

但是,如果我按照您的建议使用以下代码:

mydata = {};
mydata.employee = [];

$$mytab.eachRow(function(item){mydata.employee.push(item);}, true);

console.log(JSON.stringify(mydata.employee); 

/* Consider the same forloop in this case as above */

这个只是给我: [1497258960089,1497258960162]

并抛出错误:

  

未捕获的TypeError:无法使用'in'运算符在1497258960089中搜索'salary'

我怎样才能在你的情况下实现同样的目标?

1 个答案:

答案 0 :(得分:1)

对于数据表,您可以使用eachRow方法和true作为第二个参数。

拥有对象数组:

var data = [];
var datatable = $$('my_table')
datatable.eachRow(function(item_id) {data.push(datatable.getItem(item_id));}, true);

对于treetable ,我们使用的解决方案是使用这种低级方法迭代数据:

var treetable = $$('my_table')
treetable.data.each(callback, treetable, true);

拥有对象数组:

var data = [];
var treetable = $$('my_table')
treetable.data.each(function(item) {data.push(item);}, treetable, true);