Nested Sortable Knockoutjs, возможность конвертировать задачу в подзадачу и наоборот
Я пытаюсь создать вложенный сортируемый список (только до уровня 2). Я пытался использовать сортируемый плагин RP Neimeyers, но мне нужно больше функций, таких как
- Подпункт должен быть в состоянии стать родительским элементом
- Родительский элемент должен иметь возможность стать вложенным элементом.
- Если элемент с подэлементами перетаскивается в какой-либо родительский элемент, этот родительский элемент должен переходить в перкулярный родительский элемент как субэлемент, а его подэлементы должны становиться основными элементами. (не уверен, если это возможно)
- ведение индексации для родительских и вспомогательных элементов.
Чего я достиг к настоящему времени -
- Индексирование родительских элементов
- Перетаскивание родительских элементов для изменения приоритета.
Я застрял на: 1. Ведение индексации для подпунктов 2. Возможность конвертировать основной элемент в подпункт и наоборот.
Моя попытка на JSFiddle: http://jsfiddle.net/83QrY/
Весь код дан в KnockoutJS..
я использую self.Tasks.withIndex("Position", 0, 0);
поддерживать индексацию. Я надеюсь, что кто-то определенно поможет мне в достижении этого..
PS: я не прошу решения, я хочу помочь в достижении этого. Я также должен изучить это:-)
С уважением. RP.
1 ответ
Решение
Вот несколько советов:
connectClass
Опция определяет, какие сортируемые объекты можно перетаскивать друг с другом. На верхнем уровне сортировки установлено значение "Задачи", что предотвращаетSubTasks
списки от возможности взаимодействовать с родителями. Таким образом, вы можете удалитьconnectClass
опция от родителя, чтобы позволить переход между родителем / ребенком- когда вы переходите от родительского к дочернему, вы должны будете убедиться, что их структура одинакова для привязки, в противном случае вам нужно будет выполнить какое-то отображение. для вашего примера я бы, вероятно, бросил плагин сопоставления и создал бы
TaskModel
который поддерживает все ваши наблюдаемые свойства, которые вы можете использовать для задач и подзадач. В противном случае вы можете использоватьbeforeMove
обратный звонок на картуarg.item
в правильный формат, склейте его вручную (используяarg.TargetParent
а такжеarg.TargetIndex
), затем установитеarg.cancelDrop
равно истине. withIndex
расширение - это способ, которым мне нравится поддерживать индекс. вTaskModel
конструктор, вы можете создатьSubTasks
observableArray с добавленной индексацией. В противном случае, вы можете использовать параметры отображения плагина отображения, чтобы попытаться это сделать.- вам может понадобиться стиль, чтобы помочь пользователю узнать, попадают ли они в родительский или дочерний список.
- если вы поместите родителя с подзадачами в существующий список подзадач, то я не уверен, что вы хотите делать с подзадачами, существовавшими в оригинале. это может быть тот случай, когда вы хотите использовать
beforeMove
извлечь подзадачи.
Вот пример с первыми 3 обновлениями: http://jsfiddle.net/rniemeyer/5V3rK/