2010-11-10 9 views
18

Je travaille avec les groupes Google sur les forums de Knockout pour obtenir de l'aide à ce sujet - mais je pense qu'un public plus nombreux ne peut jamais nuire à la situation.Knockoutjs avec jQuery UI Sortable

J'essaie de faire fonctionner KO avec une situation en utilisant le plugin 'Sortable' de jQuery UI. J'ai mon code posté ici.

http://www.pastie.org/1285716

Toute tentative d'utiliser une fixation sur mesure ...

 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(); 
      } 
     }; 

L'objectif est que lorsque la liste Sortable reçoit un élément, il peut obtenir l'élément et l'ajouter à l'autre observableArray.

Cela ne fonctionne pas tout à fait pour moi, cependant. J'ai de la difficulté à déclencher l'événement comme je le veux. La façon dont je l'ai mis en place, il fait feu, mais il ne renvoie qu'une valeur «vrai/faux». J'espérais que quelqu'un d'autre pourrait avoir une idée de ce que je fais de mal et savoir comment le réparer.

(utiliser le code, vous devez faire référence

<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> 

en haut, puis la nouvelle version de knock-out (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 est une grande mise en œuvre. – Joe

Répondre

10

Je ne l'ai pas réaliser Steve had already answered this avant que j'aie fini, mais ici vous allez, légèrement différent que lui

Sortable rend beaucoup plus difficile, ça d été beaucoup plus facile avec un lien glisser-déposer lié à chaque produit. Le problème avec sortable est que vous liez sur la liste entière au lieu des éléments.

http://www.pastie.org/1432093

+0

Merci, et je dois remercier Steve aussi. Je n'ai jamais eu un email qu'il avait répondu - donc j'ai supposé qu'il venait de tomber à la trappe. Je suppose que j'ai oublié de m'abonner au fil.Cet exemple est extrêmement utile et me fera gagner beaucoup de temps dans ce que je dois faire avec. – Ciel

+0

Il convient de noter que c'était une solution KO 1.0 et beaucoup de choses ont depuis changé. Ryan Niemeyer a revisité le post de tri KO 2 dans ce [plugin solide] (http://www.knockmeout.net/2012/02/revisiting-dragging-dropping-and.html) – madcapnmckay

16

que nous avons retravaillé l'échantillon et est venu avec un bindingHandler presque complet, il ne nécessite pas un attribut id et il gère également réordonner. Voici le code:

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

utilisation

:

  • Il utilise la template.foreach liant pour savoir quel est le tableau associé dans la viewmodel.

  • Vous pouvez utiliser databind = "foreach: Products, sortable: true" pour activer le tri dans un seul tableau sans options.

  • Il fonctionne avec les objets observableArray.

  • Il construit le jQuery triable par lui-même, vous pouvez passer le même objet d'options dans la liaison que dans le constructeur jQuery.sortable.

+1

C'est une excellente réponse. J'ai pu l'utiliser pour changer l'ordre de tri pour un observableArray knockout en ajoutant le suivant après votre nouvel appelArray.splice: $ (viewModel.items()). Chaque (fonction (index) { \t var newSortOrder = index + 1; \t var thisItem = viewModel.items() [index]; \t thisItem.sortOrder (nouveauSortOrder); }); – Reaction21

+0

@ Guillaume86 Malheureusement votre solution ne fonctionne pas avec Knockout> v3.1.0 Les éléments disparaissent de deux fois lors du tri – RHAD

+0

@Richard désolé je suis passé à angulaire il y a quelques années je n'utilise plus knock-out – Guillaume86