如何序列化所有行而不是 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);
我有 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);