对这篇文章中的所有代码表示歉意,但我不知道如何描述它。
我有一些Javascript,它位于Vue组件中(该组件用于封装Datatable):
let table = $('#datatables-table').DataTable({
"ajax": {
"url": self.dataUrl,
"type": "POST",
"data": function(d){
d.table = self.table;
},
},
"columns": self.tableColumns,
order: [1, 'asc'],
dom: "Bfrtip",
responsive: false,//true wont let me hide columns
"scrollY": "600px",
"scrollCollapse": true,
"paging": false,
select: {
style: 'single',
selector: 'td:first-child',
blurable: true
},
buttons: self.buttons,
});
我正在尝试传递按钮(self.buttons)配置,这就是我想要的样子:
[{extend:'remove', editor: editor},{extend:'create', editor: editor},{extend:'edit', editor: editor},],
在我的挂载方法中填充变量。通过AJAX:
axios.get(self.tableUrl)
.then(function (response) {
self.tableHeaders = response.data.tableHeaders;
self.panelTitle = response.data.panelTitle;
self.table = response.data.table;
self.editorFields = response.data.editorFields;
self.tableColumns = response.data.tableColumns;
self.buttons = response.data.buttons;
这是PHP(Laravel),以形成响应:
$dt->buttons = array(
array('extend' => 'remove', 'editor' => 'editor'),
array('extend' => 'create', 'editor' => 'editor'),
array('extend' => 'edit', 'editor' => 'editor')
);
然后我在JS中做了JSON.stringify
,但问题是我最终得到了这个:
"[{"extend":"remove","editor":"editor"},{"extend":"create","editor":"editor"},{"extend":"edit","editor":"editor"}]"
那么,我怎样才能传递按钮,这样它们就不是一个字符串而编辑器不是"编辑器" (双引号)。
我想我需要以某种方式将其作为字符串传递,但删除引号。
米克
更新:编辑器定义如上:
let editor = new $.fn.dataTable.Editor({
"ajax": {
"url": self.dataUrl,
"type": "POST",
data: {table: self.table}
},
table: "#datatables-table",
idSrc: self.table + '.id',
fields: [self.editorFields]
});
此处的完整代码:http://artisantinkerer.github.io/2016/12/15/Vue-Datatables.html
答案 0 :(得分:1)
如果response.data.buttons
确实是一个javascript数组,那么你可以用这种方式替换editor
属性的值。
response.data.buttons.map(b => ({extend: b.extend, editor: editor}))
或者只是不从服务器渲染editor
属性并映射并将其添加到客户端。