Tabulator PUT响应将覆盖表数据

问题描述 投票:0回答:1

当从Tabulator发出Ajax PUT请求时,响应将覆盖Tabulator表。我希望对于PUT请求,响应不会覆盖整个表。毕竟,已更改的数据已经反映在表中。由于大多数PUT响应都是单个对象(已更改的对象),因此该表被简化为单个行。

我的问题是:是否可以[在制表符使PUT响应NOT覆盖整个表?

这是Tabulator PUT via Ajax to Django REST Endpoint - Reduces Table to Last Edited Record的后续(希望不是重复的)。在该问题中,可以接受的答案是更改服务器端的响应,以便发送完整的数据集,而不是仅发送一条记录。对于大型数据集,这将是一个问题。

我是StackOverflow的新手,所以如果我应该重新打开该问题并关闭此问题,请告诉我。

制表器设置的代码如下:

<div id="example-table"></div> <script type="text/javascript"> // get CSRF token // https://docs.djangoproject.com/en/dev/ref/csrf/#acquiring-the-token-if-csrf-use-sessions-and-csrf-cookie-httponly-are-false function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].trim(); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var CSRF_TOKEN = getCookie('csrftoken'); // set variable to customise ajaxConfig for use in the setData call var ajaxConfigPut = { method:"PUT", //set request type to Position headers: { // "Content-type": 'application/json; charset=utf-8', //set specific content type 'X-CSRFTOKEN': CSRF_TOKEN, }, }; //create Tabulator on DOM element with id "example-table" var table = new Tabulator("#example-table", { ajaxURL:"{% url 'cust_listapi' %}", // reverse pick up the url since in a django template (?) height:205, // set height of table (in CSS or here), this enables the Virtual DOM and improves render speed dramatically (can be any valid css height value) layout:"fitColumns", //fit columns to width of table (optional) columns:[ //Define Table Columns {title:"Name", field:"name", width:150, editor:true}, {title:"Age", field:"age", hozAlign:"center",editor:true}, {title:"Age_Bar", field:"age", hozAlign:"left", formatter:"progress"}, {title:"Customer Status", field:"is_customer", hozAlign:"left"}, // {title:"Favourite Color", field:"col"}, // {title:"Date Of Birth", field:"dob", sorter:"date", hozAlign:"center"}, ], // see http://tabulator.info/docs/4.6/components#component-cell cellEdited:function(cell){ //trigger an alert message when the row is clicked console.log("Cell edited in row " + cell.getData().id + " and column " + cell.getField() + " from " + cell.getOldValue() + " to " + cell.getValue() + ". The row pk=" + cell.getData().id ); console.log(cell.getData()); var updateurl = "{% url 'cust_listapi' %}" + cell.getData().id + "/" console.log('URL is: ' + updateurl) // Create variable from full row data but drop the id; console.log('About to create updateData') var updateData = {}; updateData[cell.getField()] = cell.getValue(); console.log(updateData); console.log('About to setData'); table.setData(updateurl, updateData, ajaxConfigPut); console.log('Finished setData'); //cell.restoreOldValue(); }, ajaxResponse:function(url, params, response){ console.log('Beginning ajaxResponse') console.log('The type is:', typeof(response)); console.log(Array.isArray(response)) console.log(response) result = response; if(Array.isArray(response) === false){ result = [response]; }; return result; } }); </script>

tabulator
1个回答
0
投票
在cellEdited回调中,您正在使用table.setData。那是用来替换所有数据的。您应该使用table.updateData仅更新受影响的行。您需要将ID添加到对象。 (请查看下面的文档链接。)>

调用table.updateData不会触发对您的后端的请求。您需要分别使用fetch,xhr或其他方法来执行此操作。

这里是指向updateData页面http://tabulator.info/docs/4.6/update的链接。

如果您需要其他说明或示例,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.