Подтвердить что ты не робот

Knockoutjs с jQuery UI Sortable

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

Я пытаюсь заставить KO работать с ситуацией, используя jQuery UI '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();
            }
        };

Цель состоит в том, что, когда Sortable List получает элемент, он может получить элемент и добавить его к другому наблюдаемому массиву.

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

(для использования кода вам необходимо указать

<link href="#" onclick="location.href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css'; return false;" 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>

вверху, а затем новейшая версия Knockout (1.1.1)

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

4b9b3361

Ответ 1

Я не понимал, что Стив уже ответил на это, прежде чем закончил. Здесь вы идете, немного иначе, чем он.

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

http://www.pastie.org/1432093

Ответ 2

Я переработал образец и пришел с почти полным bindHandler, он не требует атрибута id, а также обрабатывает переупорядочение. Здесь код:

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

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

  • Он использует привязку template.foreach, чтобы узнать, что связанный массив в viewModel.

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

  • Работает с объектами observableArray.

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