2010-11-10 6 views
18

Pracuję też z Grupami dyskusyjnymi Google na forach Knockout, aby uzyskać pomoc w tej sprawie - ale sądzę, że większa publiczność nigdy nie zaszkodzi sytuacji.Knockoutjs z jQuery UI Sortable

Próbuję uzyskać KO do pracy z sytuacją za pomocą wtyczki jQuery UI "Sortable". Mam tutaj swój kod.

http://www.pastie.org/1285716

Próba użycia zwyczaj wiązania ...

 ko.bindingHandlers.onReceiveItem = { 
      init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
       $(element).bind("sortreceive", function (event, ui) { 
        ko.bindingHandlers.onReceiveItem.update(element, valueAccessor, allBindingsAccessor, viewModel); 
       }); 
      }, 
      update: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
       var value = ko.utils.unwrapObservable(valueAccessor()); 
       var bindings = allBindingsAccessor(); 
      } 
     }; 

Celem jest to, że gdy Sortable Lista otrzyma przedmiot, może uzyskać pozycję i dodać go do drugiej observableArray.

Nie działa to jednak dla mnie. Mam trudności z uruchomieniem wydarzenia, tak jak tego chcę. Sposób, w jaki go skonfigurowałem, uruchamia się, ale zwraca tylko wartość "prawda/fałsz". Miałem nadzieję, że ktoś inny może mieć pojęcie o tym, co robię źle i wiem, jak to naprawić.

(przy użyciu kodu, trzeba odwołać

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css" rel="Stylesheet" /> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.js"></script> 

na górze, a następnie najnowszą wersję Knockout (1.1.1)

http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-1.1.1.debug.js

+0

[https://github.com/rniemeyer/knockout-sortable](https://github.com/rniemeyer/knockout-sortable) Knockout.js 2.0 jest to świetna realizacja. – Joe

Odpowiedz

10

ja nie uświadom sobie Steve had already answered this zanim skończyłem.Tutaj idziesz, nieco inaczej niż on.Alternator:

Sortable sprawia, że ​​jest o wiele trudniej, ten woul d było o wiele łatwiejsze dzięki wiązaniu "przeciągnij i upuść" związanemu z każdym produktem. Problem z możliwością sortowania jest wiążący dla całej listy zamiast elementów.

http://www.pastie.org/1432093

+0

Dziękuję i muszę również podziękować Steve'owi. Nigdy nie dostałem e-maila, na który odpowiedział - więc założyłem, że właśnie upadło na margines. Chyba zapomniałem zapisać się do wątku.Ten przykład jest zbyt pomocny i zaoszczędzić mi wiele czasu w tym, co muszę z nim zrobić. – Ciel

+0

Należy zauważyć, że było to rozwiązanie KO 1.0 i wiele rzeczy się zmieniło. Ryan Niemeyer dokonał przeglądu sortowania postu KO 2 w tej [stałej wtyczce] (http://www.knockmeout.net/2012/02/revisiting-dragging-dropping-and.html). – madcapnmckay

16

I przerobione próbkę i przyszedł z prawie całkowitym bindingHandler, że nie wymaga atrybut id, a także obsługuje zamianom. Oto kod:

http://jsbin.com/knockoutsortable/20/edit

Wykorzystanie:

  • To pomocą wiązania, aby dowiedzieć się co jest związane tablica w ViewModel template.foreach.

  • Możesz użyć databind = "foreach: Produkty, sortable: true", aby umożliwić sortowanie wewnątrz pojedynczej tablicy bez opcji.

  • Działa z obiektami observableArray.

  • Buduje jQuery do sortowania sam, możesz przekazać ten sam obiekt opcji w wiązaniu niż w konstruktorze jQuery.sortable.

+1

To jest świetna odpowiedź. Byłem w stanie użyć go do zmiany porządku sortowania observableArray przez dodanie następującego po wywołaniu newArray.splice: $ (viewModel.items()). Each (function (index) { \t var newSortOrder = index + 1; \t var thisItem = viewModel.items() [index]; \t thisItem.sortOrder (newSortOrder); }); – Reaction21

+0

@ Guillaume86 Niestety twoje rozwiązanie nie działa z Knockout> v3.1.0 Pozycje znikają pojawiają się dwa razy podczas sortowania – RHAD

+0

@Richard przepraszam przerzuciłem się na kątowe kilka lat temu Nie używam nokautu już – Guillaume86