У меня есть дерево, где пользователи могут перетащить ответвления.
Теперь это работает все хорошо и хороший, но я должен смочь переместить ответвление программно.
Я должен моделировать вырезанный и вставленный (у меня будут пользовательские кнопки использования вместо Ctrl-X и V).
У кого-либо есть идея того, где я должен запустить?
Я никогда не играл с этим методом, поэтому я не могу дать вам полного решения, но класс TreePanel имеет метод movenode со следующими аргументами ... Дерево дерева, Узел узла, Узел oldParent, Узел newParent, Число index
Есть также события, связанные с этим методом. Надеюсь это поможет.
РЕДАКТИРОВАТЬ - Я слишком быстро прочитал API, это события. Я думаю, что единственный способ сделать это вручную - использовать методы appendChild и removeChild.
Вот вырезка и вставка, которая будет работать для нескольких узлов одновременно. Эта версия также скроет любые узлы, которые были "вырезаны", и не покажет их снова, пока они не будут вставлены. во время вставки будет использоваться только первый выбранный узел, все остальные будут игнорироваться.
var Children = new Array();
function CutChildren(){
Children = tree.getSelectionModel().getSelectedNodes();
var limit = Children.length;
for (count =0; count < limit; count++){
Children[count].getUI().hide();
}
}
function PasteChildren(){
var selected = new Array();
selected = tree.getSelectionModel().getSelectedNodes();
var limit = Children.length;
for (count =0; count < limit; count++){
selected[0].appendChild(Children[count]);
Children[count].getUI().show();
if (count > 100){
break;}
}
}
Ок, я нашел решение, и оно оказалось очень, ОЧЕНЬ простым:
var child = tree.getSelectionModel().getSelectedNodes();
var parent = tree.getNodeById('ABC123');
parent.appendChild(child);
оно даже автоматически удаляет узел с его первоначального места и даже перемещает любые дочерние элементы перемещенного узла.
Обратите внимание, что в данный момент это работает только с одним узлом (хотя он использует selectedNodes), позже я выложу что-то более существенное.