2011-11-07 10 views
6

Ho un ordinabile come il secondo esempio in questa pagina:Cambiare il comportamento di ordinamento per jQuery ordinabili

http://jqueryui.com/demos/sortable/items.html

Il ordinabili è un mix di obiettivi:

  • quelli che possono essere prese e riorganizzato
  • Articoli disattivati, che non possono essere prelevati (ma sono obiettivi di rilascio).

Il problema è nel modo in cui il componente interpreta la mia intenzione sull'ordinamento. A titolo di esempio raccogliendo il primo elemento del seguente elenco e trascinandolo alla quarta posizione sarà simile a questa:

A B C X X ==> B C X A X

Ecco le X indicano le voci disabili.

Nella mia applicazione vorrei che il comportamento di smistamento fosse diverso. Quando un bersaglio viene raccolto e piazzato su un oggetto disabile (una X), l'elenco non deve spostarsi per accogliere il bersaglio, ma il bersaglio e l'oggetto disabile dovrebbero scambiare le posizioni.

Utilizzando lo stesso esempio di prima (trascinamento dal 1 ° al 4 °):

ABCXX ==> XBCAX

Se la destinazione di rilascio è normale (cioè non disattivato) il comportamento dovrebbe essere la stessa di prima (trascina dal 1 al 3):

ABCXX ==> BCAXX

Pensate a come voler ri-organizzare appuntamenti in un calendario, quando si sceglie uno su da una data e cadere in una data vuota , non vorrai gli altri appuntamenti mescolare per un giorno.

+0

Sembra http://stackoverflow.com/questions/2263687/jquery-sortable-obtain-2-elements-being-swapped – sirhc

risposta

2

Ho messo insieme un jsfiddle con la funzionalità desiderata.

Fondamentalmente mi lego alla funzione di modifica di ordinabile e controllo per vedere se l'elemento che l'helper ha appena passato è disabilitato. Se lo è, sposto quell'elemento dal punto di partenza dell'helper.

Ecco la jsfiddle http://jsfiddle.net/YjhzR/3/

Spero che questo aiuti!

Aggiornamento:

http://jsfiddle.net/YjhzR/6/

+1

Se questo è ciò che l'OP voleva (non sono ancora esattamente sicuro di cosa sia) quindi congratulazioni, ti meriti la taglia :) D'altra parte - quando Ho usato il tuo violino, l'X1 è scomparso quando ho provato a mettere qualcosa accanto ad esso e OP ha mostrato un numero costante di opzioni nei suoi esempi. – naugtur

+0

Non capisco le tue 2 affermazioni "X1 è scomparso quando ho provato a mettere qualcosa vicino ad esso". Puoi spostare solo gli elementi sopra o sotto un altro elemento nel mio violino. E "OP ha mostrato un numero costante di opzioni nei suoi esempi" –

+1

Questo sembra molto promettente, anche se sto vedendo anche qualcosa di simile a naugtur. Fondamentalmente, se trascini C su X1, X1 scompare, risultando in A B C, quando il risultato dovrebbe essere A B X1 C. Più in generale, sembra interrompersi quando si tenta di scambiare due elementi adiacenti quando uno di essi è X1. Molte grazie per il codice, anche se al momento questo è molto utile come inizio - se puoi correggere il bug, la taglia è tua! – pheelicks

5

Questa non sarà esattamente una risposta alla tua domanda, ma penso che non dovresti forzare l'uso di una soluzione pronta quando non si adatta al caso.

Penso che dovresti creare il tuo controllo per mantenere gli elementi e usare i draggable di jquery-ui per implementare il comportamento. Il tuo usecase differisce dall'esempio in alcune logiche di base del comportamento.

Sarebbe utile anche per il futuro, se si ottengono più requisiti.

+0

Sono d'accordo con te in non costringendo una soluzione pronta a fare qualcosa che non è stato progettato per fare. Ma, non essendo un esperto di jquery, ero curioso di sapere se c'era un "bel modo" di alterare solo la logica di ordinamento. Il collegamento di sirhc sembra un promettente punto di partenza per la creazione di un controllo personalizzato – pheelicks

+0

Continuo a pensare che sarebbe più lavoro farlo come avevi programmato. Si prega di segnalare ciò che hai fatto e se ci sei riuscito. – naugtur

+0

Mentre Keith ha fornito una soluzione valida alla mia domanda, dopo aver giocato un po ', si scopre che questo è in realtà un modo piuttosto complicato di ri-organizzare una lista. Come tale, probabilmente userò il plug-in Swappable raccomandato da sirhc – pheelicks

Problemi correlati