Sono riuscito a implementare un trascinamento, elenco ordinabile e modificabile utilizzando jQuery UI sortable e Meteor Collection Hooks e contentEditable rispettivamente. Per un esempio parzialmente funzionante, consulta this demo.
mia implementazione è la seguente (purtroppo non sarà un semplice plug-in e andare esempio,
ma spero di ottenere una demo installato e funzionante per questo esempio specifico presto
):
client JS per trascinare, rilasciare e risparmia:
Template.templateName.rendered = ->
Deps.autorun ->
$('#list').sortable
handle: '.handle'
stop: (event, ui) ->
_.each $(event.target).children('div'), (element, index, list) ->
Elements.update { _id: element.getAttribute('data-element-id') },
$set: position: index + 1
Poche cose da notare qui, sto usando un 'manico' a trascinare l'elemento intorno, come all'interno di ogni div vi sono altri pulsanti e contenuti modificabili. Una volta che l'utente ha trascinato un elemento e lo ha rilasciato, l'evento "stop" si avvia e aggiorno l'elemento ogni nell'elenco con il nuovo posizionamento.
Ho anche la possibilità di aggiungere elementi alla pagina, che saranno posizionati in fondo alla lista. In caso contrario, è probabile che tu possa utilizzare i pacchetti Meteor Collection Behaviours e/o Mongo Counter. Tuttavia, ho utilizzato Meteor Collection Hooks#.before.insert come segue:
Collection prima gancio
@Elements.before.insert (userId, doc) ->
highestElement = Elements.findOne({},
sort: { position: -1 }
limit: 1
)
position = if highestElement? then highestElement.position else 0
doc.position = position + 1
Qui stiamo semplicemente ottenere il documento più alto, l'ordinamento sul attributo position. Se non esiste (ad es. Il primo elemento da creare) inizializziamo le posizioni per iniziare a 1.
PS: se non si capisce CoffeeScript, copypasta il codice a questo incredible tool (Js2coffee).
Edit: si prega di vedere una versione standalone qui: demo (molto lento sui server di Meteor) e il nuovo motore di rendering source code
Penso che potresti implementarlo abbastanza facilmente. Dovresti creare i tuoi dati di lista attraverso i tipici modelli Meteor e quindi usare il callback 'Template.name.rendered()' per applicare '$(). Sortable()'. È quindi possibile configurare i gestori di eventi nella stessa posizione, che potrebbe aggiornare la raccolta quando viene chiamata. – bento
nel caso in cui le persone non leggano tutte le risposte, a partire da 0.9.0 elenco ordinabile con .sortable funziona bene. hanno un esempio sul loro repo qui https://github.com/meteor/meteor/blob/devel/examples/unfinished/reorderable-list – daxiangCODE