Udało mi się zaimplementować listę "przeciągnij i upuść", sortowalną i edytowalną, używając odpowiednio jQuery UI sortable i Meteor Collection Hooks i contentEditable. Aby zobaczyć częściowo działający przykład, sprawdź: this demo.
Moje wdrożenia jest w następujący sposób (niestety to nie będzie proste wtyczki i iść przykład,
ale mam nadzieję dostać się demo i działa na tym konkretnym przykładzie wkrótce
):
Client JS do przeciągania, drop i zapisać:
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
Niewiele rzeczy zauważyć tutaj, używam „uchwytu”, aby przeciągnąć element wokół, jak wewnątrz każdy dział istnieją inne przyciski i edycji treści. Po przeciągnięciu elementu przez użytkownika i upuszczeniu go na miejsce rozpoczyna się zdarzenie "stop" i aktualizuję każdy element na tej liście z nowym pozycjonowaniem.
Mam również możliwość dodawania elementów do strony, która zostanie umieszczona na dole listy. W przeciwnym razie prawdopodobnie uciekniesz z użyciem pakietów Meteor Collection Behaviours i/lub Mongo Counter. Jednak ja wykorzystane Meteor Collection Hooks#.before.insert następująco:
Collection przed hakiem
@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
Tutaj mamy po prostu coraz najwyższy dokument, sortowanie na atrybutem pozycji. Jeśli nie istnieje (np. Pierwszy element, który ma zostać utworzony), inicjalizujemy pozycje na początek 1.
PS: jeśli nie rozumiesz CoffeeScript, wykonaj kopię tego kodu do tego incredible tool (Js2coffee).
Edit: proszę zobaczyć autonomiczną wersję tutaj: demo (bardzo powolny na serwerach Meteor) i nowy silnik renderowania source code
Myślę, że można go wdrożyć dość łatwo. Tworzysz listę danych za pomocą typowych szablonów Meteor, a następnie użyjesz wywołania zwrotnego 'Template.name.render()', aby zastosować '$(). Sortable()'. Następnie można skonfigurować programy obsługi zdarzeń w tym samym miejscu, które mogłyby zaktualizować kolekcję po wywołaniu. – bento
w przypadku, gdy ludzie nie czytają wszystkich odpowiedzi, na liście sortowalnej 0.9.0 z .system działa dobrze. mają przykład na ich repo tutaj https://github.com/meteor/meteor/blob/devel/examples/unfinished/reorderable-list – daxiangCODE