Guardando la fonte per ui.sortable.js (1.7.2), si può imbrogliare e impostare il placeholder
ad un oggetto con una funzione element
e una funzione update
. La funzione element
viene utilizzata per restituire l'oggetto dom segnaposto e la funzione update
consente di eseguire operazioni come correggere le sue dimensioni (è possibile controllare la funzione _createPlaceholder
all'interno di sortable se si desidera visualizzare l'implementazione predefinita).
Così, per esempio, il seguente sarà creare un elemento di lista con la parola prova all'interno come segnaposto (si noti che restituisce l'oggetto vero e proprio dom ([0]
) e non l'oggetto jQuery stesso):
$("#sortable").sortable({
placeholder: {
element: function(currentItem) {
return $("<li><em>test</em></li>")[0];
},
update: function(container, p) {
return;
}
}
});
Se sto leggendo la fonte correttamente, la funzione element
deve essere passata all'elemento corrente (oggetto jQuery) e this
dovrebbe puntare allo stesso sortable
(ovvero $("#sortable")
in questa istanza). In update
si passa il "contenitore" che è l'oggetto che contiene tutte le opzioni, & l'elemento, ecc. & il placeholder
stesso.
Si prega di notare che questo è un trucco non documentato, quindi sarebbe ovviamente supportato & potrebbe cambiare con la prossima versione di jQuery UI ... ma ancora può essere utile a voi, dato che stavi parlando di modifica ui.sortable.js
direttamente comunque.
Spero che questo aiuti.
Funziona perfettamente - grazie !! – brahn
Bello; se vuoi fare un lavoro ordinabile quando vuoi un'altezza fissa per gli oggetti durante il trascinamento (ad esempio, per oggetti enormi), puoi usare (nella funzione di aggiornamento sopra): 'container.refreshPositions();' e quella correzione qualunque cosa. Whoohoo! – kamranicus
Ora sto usando questo trucco per implementare icone trascinabili che vengono visualizzate come l'elemento DOM che rappresentano quando vengono trascinate su Sortable collegato. Complimenti extra per aver letto la fonte; Ci ho provato e ora ho bisogno di medicine. – Altreus