item_{id}
形式的id。在update事件中,我将序列化两列中的元素。我想知道是否有一种有效的方法来序列化col1和col2列顺序并将它们组合成一个数据库调用。开箱即用,sortable(“serialize”)方法将返回一个格式化的字符串,如:
item[]=88&item[]=1&item[]=2&item[]=90
因此,在第1列的更新事件中,我有:
$("#col1").sortable({
handle: '.item h2',
connectWith: '#col2',
update: function(event, ui) { Update(event, ui); }
}).disableSelection();
同样对于第2栏:
$("#col2").sortable({
handle: '.item h2',
connectWith: '#col1',
update: function(event, ui) { Update(event, ui); }
}).disableSelection();
更新事件:
function Update(event, ui) {
var col1Order = $("#col1").sortable("serialize"); // Returns item[]=88&item[]=1&item[]=2&item[]=90
var col2Order = $("#col2").sortable("serialize"); // Returns item[]=23&item[]=10&item[]=65
}
是否有一种有效的方法将第1列排序和第2列排序组合到一个数据库调用中(它会将更新后的位置存储在数据库中)?
如果我将两个结果连接在一起,它将产生一个形式的字符串:
item[]=88&item[]=1&item[]=2&item[]=90&item[]=23&item[]=10&item[]=65
使用此表单,您无法区分哪个项来自哪个列。我考虑过不同的方法。一种方法是将查询字符串格式化为?col1=88_1_2_90&col2=23_10_65
,然后在服务器端将{1}}上的col1值88_1_2_90
分开,这将给出一组值(88)在位置0,1位在位置1,依此类推)并使用相同的方法拆分col2值,但我认为可能有更优雅的方法来实现这一点。
我的主要目标是避免进行两次单独的数据库调用(一次用于column1,另一次用于column2)。我可以序列化col1并调用数据库来更新col1中元素的位置,然后序列化col2并再次调用数据库来更新col2中元素的位置,但这就是我试图避免的。
我愿意接受任何建议。提前谢谢。
答案 0 :(得分:1)
您可以使用以下方法解决此问题:
jQuery('.column').sortable('serialize', {key: 'widgets[0][]'});
答案 1 :(得分:0)
使用嵌套数组怎么样?你应该得到这样的东西:
item[0][]=88&item[0][]=1&item[0][]=2&item[0][]=90&item[1][]=23&item[1][]=10&item[1][]=65
如果需要,您可以轻松地使用与数组相关的函数将其展平为一个数组。