2010-11-10 7 views
18

Я тоже работаю с форумами Google на форумах нокаута, но мне кажется, что большая аудитория никогда не сможет повредить ситуацию.Knockoutjs с пользовательским интерфейсом jQuery Sortable

Я пытаюсь заставить KO работать с ситуацией, используя jQuery UI's 'Sortable' plugin. У меня есть мой код, размещенный здесь.

http://www.pastie.org/1285716

Попытка использовать пользовательские привязки ...

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

Цель состоит в том, что, когда Сортируемый список получает элемент, он может получить товар и добавьте его в другой observableArray.

Это не совсем работает для меня. У меня возникли трудности с тем, чтобы запустить событие, как я этого хочу. Как я его настроил, он срабатывает, но он возвращает только значение «истина/ложь». Я надеялся, что у кого-то еще может быть представление о том, что я делаю неправильно, и знаю, как это исправить.

(использовать код, вам нужно ссылаться на

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

в верхней части, а затем новую версию Нокаут (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 это отличная реализация. – Joe

ответ

10

я не сделал осознать Steve had already answered this, прежде чем я закончил. Здесь вы идете, немного иначе, чем он.

Сортировка делает это намного сложнее, этот woul d были намного проще с привязкой к перетаскиванию, связанной с каждым продуктом. Проблема с сортировкой заключается в том, что вы привязываетесь ко всему списку, а не к элементам.

http://www.pastie.org/1432093

+0

Спасибо, и мне тоже нужно поблагодарить Стива. У меня никогда не было письма, на которое он ответил, поэтому я предположил, что он только что упал на обочину. Наверное, я забыл подписаться на эту тему.Этот пример слишком полезен и сэкономит мне много времени на то, что мне нужно с ним делать. – Ciel

+0

Следует отметить, что это было решение KO 1.0, и с тех пор многое изменилось. Райан Нимейер пересматривал сортировку post KO 2 в этот [плавный плагин] (http://www.knockmeout.net/2012/02/revisiting-dragging-dropping-and.html) – madcapnmckay

16

я переработал образец и пришел с почти полным bindingHandler, он не требует идентификатор атрибута, и он также обрабатывает переназначения. Вот код:

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

использование:

  • Это используя template.foreach связывания, чтобы выяснить, что это ассоциативный массив в ViewModel.

  • Вы можете использовать databind = "foreach: Products, sortable: true", чтобы включить сортировку внутри одного массива без параметров.

  • Работает с объектами наблюдаемого объекта.

  • Это построение jQuery, сортируемое самостоятельно, вы можете передать тот же объект options в привязке, что и в конструкторе jQuery.sortable.

+1

Это отличный ответ. Я смог использовать его для изменения порядка сортировки для нокаута наблюдаемого массива, добавив ниже после вызова 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 К сожалению, ваше решение не работает с Knockout> v3.1.0 Элементы исчезают при появлении дважды при сортировке – RHAD

+0

@Richard жаль, что я переключился на углы несколько лет назад. Я больше не использую нокауты – Guillaume86

Смежные вопросы