Можно ли получить узел по его внутреннему идентификатору? Я попробовал:
Магазин
Ext.define('myStore', {
extend: 'Ext.data.TreeStore',
storeId: 'treestore',
root: {
text: 'root',
children: [{
text: 'leaf1',
id: 'leaf1',
children: [{
text: 'child1',
id: 'child1',
leaf: true
},{
text: 'child2',
id: 'child2',
leaf: true
}]
},{
text: 'leaf2',
id: 'leaf2',
leaf: true
},{
text: 'leaf3',
id: 'leaf3',
leaf: true
}]
},
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
дерево
Ext.create('Ext.tree.Panel', {
id: 'myTree',
rootVisible: false,
store: Ext.create('myStore'),
width: 300,
height: 500,
renderTo: Ext.getBody()
});
Добавление и получение узла
Ext.getCmp('myTree').getRootNode().appendChild({id: 'test', text: 'test', leaf: true}); // this test node takes on the internalId 'ext-record-2'
Ext.getCmp('myTree').store.getNodeById('ext-record-2'); // returns undefined
Ext.getCmp('myTree').getRootNode().findChild('id', 'ext-record-2', true); // returns null
Ext.getCmp('myTree').getRootNode().findChild('internalId', 'ext-record-2', true); // I was just trying things at this point.
Я понимаю, что это, вероятно, невозможно, поэтому я объясню, что я пытаюсь сделать ... Я пытаюсь изменить идентификатор узла, поэтому, когда я использую getNodeById
, я могу использовать новый идентификатор, который я сделал. Идея состоит в том, что если бы я изменил идентификатор, я мог бы найти его в дереве, и он был бы уникальным, потому что я позволял только добавлять уникальные идентификаторы ... но идентификатор не изменился бы. Затем я подумал, что использование идентификатора ext-record позволит мне вернуть уникальный идентификатор, но тогда я не смог этого понять, ха-ха.
Вот код, показывающий, что я хотел бы сделать.
var node = Ext.getCmp('myTree').store.getNodeById('test'); // returns my test node
node.beginEdit();
node.set('id', 'blah');
node.endEdit();
node.commit(false);
alert(Ext.getCmp('myTree').store.getNodeById('blah')); // returns undefined
alert(Ext.getCmp('myTree').store.getNodeById('test')); // still returns my test node
Я пытался использовать метод синхронизации дерева, но ничего не сделал. Мне просто интересно, как я могу обновить идентификатор узла, поэтому, когда я использую getNodeById
, я могу использовать новый идентификатор. Есть мысли?