2009-08-11 13 views
0

Hey alle. Ein kurzer Überblick über das, was ich erreichen möchte. Ich habe zwei Spalten mit Daten. Jede Spalte hat eine willkürliche Menge an homogenen Elementen. Bei dem sortierbaren jQuery-Update-Ereignis möchte ich die Position aller Elemente in ihrer respektablen Spalte serialisieren. Jedes Element in den Spalten hat eine ID der Form item_{id}. Im Update-Event werde ich die Elemente in beiden Spalten serialisieren. Ich wollte wissen, ob es eine effiziente Möglichkeit gibt, die col1- und col2-Spaltenaufträge zu serialisieren und zu einem einzigen Datenbankaufruf zusammenzufassen. Out of the box, die sortierbare ("serialize") -Methode wird wieder eine formatierte Zeichenfolge wie:jQuery sortierbar serialisieren zwei Spalten in einem Datenbankaufruf?

item[]=88&item[]=1&item[]=2&item[]=90 

Also, in dem Aktualisierungsereignis für Spalte 1, ich habe:

$("#col1").sortable({ 
    handle: '.item h2', 
    connectWith: '#col2', 
    update: function(event, ui) { Update(event, ui); } 
}).disableSelection(); 

Und ebenfalls für Spalte 2:

$("#col2").sortable({ 
    handle: '.item h2', 
    connectWith: '#col1', 
    update: function(event, ui) { Update(event, ui); } 
}).disableSelection(); 

und das Update Event:

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 
} 

Gibt es eine effiziente Möglichkeit, die Sortierung von Spalte 1 und Spalte 2 in einen Datenbankaufruf zu kombinieren (wird die aktualisierte Position in der Datenbank gespeichert)?

Wenn ich die beiden Ergebnisse zusammen verketten, wird es in einem String der Form zur Folge hat:

item[]=88&item[]=1&item[]=2&item[]=90&item[]=23&item[]=10&item[]=65 

Mit diesem Formular können Sie nicht unterscheiden, welches Element aus welcher Spalte kam. Ich habe verschiedene Ansätze erwogen. Ein Ansatz würde die Abfragezeichenfolge so formatieren, dass sie etwa wie ?col1=88_1_2_90&col2=23_10_65 aussieht und dann auf der Serverseite den col1-Wert 88_1_2_90 auf der '_' aufteilt, was mir ein Array von Werten geben würde (88 in Position 0, 1 in Position 1 usw.)) und spalte den Col2-Wert mit der gleichen Methode, aber ich dachte, es könnte einen eleganteren Weg geben, dies zu erreichen.

Mein Hauptziel ist es, zwei separate Datenbankaufrufe zu vermeiden (einen für Spalte1 und einen anderen für Spalte2). Ich könnte col1 serialisieren und einen Aufruf an die Datenbank machen, indem ich die Positionen der Elemente innerhalb von col1 aktualisiere und dann col2 serialisiere und einen weiteren Aufruf an die Datenbank mache, indem ich die Positionen der Elemente innerhalb von col2 aktualisiere, aber das wollte ich vermeiden.

Ich bin offen für alle Vorschläge. Danke im Voraus.

Antwort

0

Wie wäre es mit verschachtelten Arrays?

item[0][]=88&item[0][]=1&item[0][]=2&item[0][]=90&item[1][]=23&item[1][]=10&item[1][]=65 

Sie können ganz einfach verwenden Array-bezogene Funktionen zu glätten, dass in einem Array, wenn nötig: Sie sollten so etwas wie dieses.

1

Sie können dieses Problem lösen, indem:

jQuery('.column').sortable('serialize', {key: 'widgets[0][]'});