如何序列化所有行而不是 Webix 数据表中过滤的行

How to serialize on all rows not on the filtered ones in Webix datatable

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

我正在使用 serialize() 将整个 table 数据传送到 JSON 对象,如下所示:

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

现在,问题是,当整个 table 被过滤并只显示总共 100 行中的 10 行时,然后 serialize() 只给我数据对象中的那 10 行而不是 100 行.

有没有办法,我总是可以序列化整个数据table(即本例中的 100 行),而不管它显示的是过滤后的数据还是整个 table?

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

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

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

(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]

并抛出错误:

Uncaught TypeError: Cannot use 'in' operator to search for 'salary' in 1497258960089

我怎样才能在你的情况下也达到同样的效果?

对于数据表,您可以使用 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);