Я пытаюсь установить другой корневой узел в моем TreeStore в Ext JS 4.0.7, но мне кажется, что я не могу сделать это правильно ... Я не знаю, является ли это еще одна ошибка в рамках или еслиЯ просто неправильно использую функции, поэтому прошу помощи.Вот код, с которым я работаю.
Создание пустого узла для последующего использования
var node = {
id: 'root',
text: 'root',
expanded: true,
children: [{
id: 'child1',
text: 'child1',
leaf: true
},{
id: 'child2',
text: 'child2',
leaf: true
}]
};
Магазин
var store = Ext.create('Ext.data.TreeStore', {
storeId: 'treestore',
proxy: {
type: 'memory',
reader: {
type: 'json'
}
},
snapshot: node,
root: {
id: 'root',
text: 'root',
expanded: true,
children: [{
id: 'dummy1',
text: 'dummy1',
leaf: true
},{
id: 'dummy2',
text: 'dummy2',
leaf: true
}]
}
});
Панель дерева
Ext.create('Ext.tree.Panel', {
store: store,
renderTo: Ext.getBody(),
height: 600,
width: 600,
id: 'mytree',
tbar: [{
xtype: 'button',
text: 'set child1 as root',
handler: function() {
var store = Ext.getCmp('mytree').store;
store.setRootNode(store.snapshot);
alert(store.getNodeById('child1').data.id); // alerts child1
}
},{
xtype: 'button',
text: 'set dummy1 as root',
handler: function() {
var store = Ext.getCmp('mytree').store;
store.setRootNode(store.snapshot2.copy(null, true));
alert(store.getNodeById('dummy1')); // alerts undefined
}
},{
xtype: 'button',
text: 'set dummy1 with diff copy',
handler: function() {
var store = Ext.getCmp('mytree').store;
store.getRootNode().removeAll();
store.snapshot2.eachChild(function(rec) {
store.getRootNode().appendChild(rec.copy(null, true));
});
alert(store.getNodeById('dummy1').data.id); // alerts dummy1
}
}]
});
Установка снимка 2 для текущего корневого узла магазина
Ext.getCmp('mytree').store.snapshot2 = Ext.getCmp('mytree').store.getRootNode().copy(null, true);
Так что, когда вынажмите первую кнопку, и вы получите правильное значение ('child1') в предупреждении.Однако, когда вы нажимаете вторую кнопку («установить dummy1 как root»), вы получаете неопределенное предупреждение.Третья кнопка дает вам правильный вывод ('dummy1') и вручную копирует каждый дочерний элемент в корень.
Мне кажется, что функция копирования или функция setRootNode что-то делает неправильно (больше склоняясь к первому).Если я указываю глубокую копию с copy(null, true)
, то глубокая копия должна выполняться, и все должно быть в порядке ... но я понимаю, что есть проблема с функцией копирования с самого начала (см. нить ).Вот почему я думаю, что это может быть с setRootNode, но это не имело бы смысла, если setRootNode работает для моего созданного узла, но не для глубоко скопированного исходного корневого узла.
Может кто-нибудь предложить какое-либо понимание относительночто я делаю не так?Буду признателен за любую помощь.Спасибо!