jquery - 如何使用数组中的树枝循环将行添加到数据表?
问题描述
这是我的数组group
:
array:4 [▼
0 => Fields {#7444 ▼
-id: 1
-name: "ID"
-unique_id: "6ab8c870ed"
-productgroup: PersistentCollection {#7448 ▶}
-type: Type {#7525 ▼
+__isInitialized__: true
-id: 2
-name: "hidden"
-unique_id: "5e1086c862"
-label: "hidden"
…2
}
}
1 => Fields {#7526 ▼
-id: 2
-name: "Name"
-unique_id: "deb1e9ddda"
-productgroup: PersistentCollection {#7527 ▶}
-type: Type {#7529 ▶}
}
2 => Fields {#7530 ▶}
3 => Fields {#7534 ▶}
]
这是我的数组columns
:
array:3 [▼
"id" => ReflectionProperty {#7240 ▶}
"name" => ReflectionProperty {#7241 ▶}
"type" => ReflectionProperty {#7244 ▶}
]
这是我将行添加到我的数据表的方式:
$(document).on('change', '.item-select', function() {
var optionValue = $(this).val();
var myArray = [];
{% for key, value in group %}
if(optionValue == "{{ value.id }}"){
var id = "{{ value.id }}";
var name = "{{ value.name }}";
var type = "{{ value.type.name }}";
}
{% endfor %}
if (optionValue) {
table.row.add({
{% for key, value in columns %}
{% if key == "id" %}
"{{ key }}": id,
{% elseif key == "name" %}
"{{ key }}": name,
{% elseif key == "type" %}
"{{ key }}": type,
{% else %}
"{{ key }}": '',
{% endif %}
{% endfor %}
}).draw();
$('option', this).first().prop('selected', true);
}
});
它工作正常。问题是,它是硬编码的。但我的领域和内容总是不同的。在这个例子中它是id:1, name: ID, type:hidden
,但在其他情况下它可能是id:14, profession:teacher, color: blue, friends: 14
。所以我需要替换变量id, name and type
但我只是不知道该怎么做。
解决方案
我可以给你举个例子,你可以如何通过 javascript 对象动态地做到这一点,在 twig 数组中,你可以将你的数组分配给 javascript 对象,或者直接通过 ajax 获取它,这取决于你。
为了创建具有新列的数据表,您需要销毁数据表并重新初始化它。在表中销毁和加载新列的文档在这里:
https://datatables.net/reference/api/destroy()
我在 jsfiddle 中为您创建了如何动态加载数据和列的示例,您可以根据需要对其进行调整:
var data = {
"data": [
{
"id": "1",
"One": "Row 1 - Field 1",
"Two": "Row 1 - Field 2",
"Three": "Row 1 - Field 3"
},
{
"id": "2",
"One": "Row 2 - Field 1",
"Two": "Row 2 - Field 2",
"Three": "Row 2 - Field 3"
},
{
"id": "2",
"One": "Row 2 - Field 1",
"Two": "Row 2 - Field 2",
"Three": "Row 2 - Field 3"
}
],
"options": [],
"files": [],
//in columns you need to map data to key in data array above!!
"columns": [
{
"title": "id",
"data": "id"
},
{
"title": "One",
"data": "id"
},
{
"title": "Two",
"data": "Two"
},
{
"title": "Three",
"data": "Three"
}
]
}
和初始化:
$('#example').DataTable( {
dom: "Bfrtip",
data: data['data'] ,
columns: data['columns']
});
https://jsfiddle.net/nicandr/xjue540a/4/
这是基本示例,如何做到这一点。请注意,您需要在获取数据后重新初始化表,因为所有数据都将在您将提供给数据表的对象中。
现在没有选项可以在不重新初始化的情况下动态加载列,所以唯一的方法是重新初始化它。请检查有关销毁表的链接,他们在那里说。
推荐阅读
- ios - iOS 通用链接(在调试时)不起作用?
- css - 创建一个使用 100% 弹性表的“行高”的行尾“单元格”,而不考虑其他项目的弹性包装
- delphi - Delphi TEdit onClick - 启用并执行其他操作
- go - 如何在 GoLand 中运行并将命令行参数传递给 main.go?
- excel - VBA ByRef 参数类型不匹配不一致?
- c++11 - 如何将构建器对象写入 C++ 中 Cap'n Proto 中的输出流对象而不是文件?
- azure-devops - VSTS CD 阶段任务总是一次性打印日志
- apache-spark - Spark JDBC连接将主键解释为可为空
- c - 如何在 C 语言中同时使用 writefds 和 readfds 进行多客户端服务器通信程序?
- visual-studio-2017 - Visual Studio 2017 中文本编辑器的分词器