【发布时间】:2015-09-18 22:02:00
【问题描述】:
manualRowMove 视觉效果很好,但底层 dom 没有得到更新。在 manualRowMove 之后,HOT.getData() 显示的是旧的数据序列,而不是行交换后的最新序列。
请告知我做错了什么还是错误。
【问题讨论】:
标签: handsontable
manualRowMove 视觉效果很好,但底层 dom 没有得到更新。在 manualRowMove 之后,HOT.getData() 显示的是旧的数据序列,而不是行交换后的最新序列。
请告知我做错了什么还是错误。
【问题讨论】:
标签: handsontable
开启 manualRowMove 和移动行不会影响原始数据源。 HOT.getData() 返回的是原始数据源,并不是表的当前状态。
manualRowMove、manualColMove、columnSorting 等插件只是位于数据层之上的抽象。它们维护handsontable 对象(即sortIndex 属性)的状态,该对象基本上充当从作者所谓的“逻辑索引”到“物理索引”的查找表。在此处阅读更多信息:https://github.com/handsontable/handsontable/wiki/Understanding-column-sorting-plugin
您似乎正在尝试允许用户对表格的顺序进行排序,然后保存该顺序。您必须滚动自己的函数来遍历表格并使用 getDataAtRow() 之类的方法按表格顺序获取数据。
【讨论】:
我解决这个问题的方法是使用 PHP 脚本将新订单推送到服务器上的数据库(需要一些>交换逻辑,这在 PHP 领域并不容易,但它是可行),理论上你可以重新收集网格并“刷新”它,但我觉得没有必要。显然我数据库中的原始json是按顺序列出的
afterRowMove: function (oldIndex, newIndex){
$.post('../ajax/partsOrder.php?id=212&new_parts_order=' + newIndex + '&old_parts_order=' + oldIndex, function(data) {
var msg = '';
if (data.err!=0 || data.url==0) {
msg = 'Error: ' + data.err;
}
else {
msg = 'Success: ' + data.msg;
}
console.log('partsOrder.php says: '+msg);
},"json");
}
PS:我认为这是 handontable 中的一个主要遗漏,getData() 并不简单地代表 gui,这让我印象深刻。事实上,他们甚至在没有这个的情况下在 gui 上工作是边缘犯罪
【讨论】: