我正在使用jQuery UI排序插件來管理我的數據庫中的數據權重值。開箱即用,jQuery可排序序列化將返回列表中的所有數據索引以進行更新。這對我來說是不必要的,因爲只有在更新時有權重變化的項目是項目的新索引和先前索引之間的項目(反之亦然)。jQuery可排序的自定義索引範圍序列化
例如,讓我們看看下面的數據集:
<div id="sortable">
<div id="data_A">Data A</div>
<div id="data_B">Data B</div>
<div id="data_C">Data C</div>
<div id="data_D">Data D</div>
<div id="data_E">Data E</div>
<div id="data_F">Data F</div>
</div>
[0] = A
[1] = B
[2] = C
[3] = D
[4] = E
[5] = F
如果我移動d列表中的位置1,現在我們有以下幾點:
<div id="sortable">
<div id="data_A">Data A</div>
<div id="data_D">Data D</div>
<div id="data_B">Data B</div>
<div id="data_C">Data C</div>
<div id="data_E">Data E</div>
<div id="data_F">Data F</div>
</div>
[0] = A
[1] = D
[2] = B
[3] = C
[4] = E
[5] = F
只索引1(新位置)通過3(先前位置)受到影響並要求數據庫更新其權重。
我的問題是,我將如何在每次更新時只序列化這個特定的數據集?
這裏就是我在目前我的代碼:
$("#sortable").sortable({
placeholder: "sortable-placeholder",
start: function (event, ui) {
$(this).attr('data-previndex', ui.item.index());
},
update: function (event, ui) {
var newPosition = ui.item.index();
var prevPosition = $(this).attr('data-previndex');
$.ajax({
type: "POST",
url: "/topics/updateorder",
// sends all data ** TODO: WE ONLY WANT TO PASS SERIALIZED DATA FOR INDEXES newPosition - prevPosition (or visa-versa) **
data: $(this).sortable("serialize") // currently sends data[]=A&data[]=D&data[]=B&data[]=C&data[]=E&data[]=F, we want data[]=D&data[]=B&data[]=C
});
}
});
很顯然,我需要自定義序列或某種(我認爲),只是不知道如何。但是,只傳遞更改後的數據的一個問題是,我無法再根據發佈的表單數據的索引更新權重(因爲它不再通過)。我必須以某種方式將它們的索引值與所有其他數據相關聯。
謝謝。
$(this).sortable(「serialize」)返回什麼? – DG3 2012-03-02 17:51:38
「將可排序的項目ID序列化爲form/ajax可提交的字符串。調用此方法會生成一個哈希值,該哈希值可以附加到任何url以便輕鬆地將新項目訂單提交回服務器。「有關詳細信息,請查看下面的方法> Serialize:http://jqueryui.com/demos/sortable/#method-serialize。在上面的例子中,它會返回類似於** data [] = A&data [] = D&data [] = B&data [] = C&data [] = E&data [] = F ** – kspearrin 2012-03-02 18:21:57