我的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'
我怎样才能在你的情况下实现同样的目标?
答案 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);