可以通過其internalId獲取節點嗎?我想:Ext JS 4:通過internalId獲取TreeStore節點
商店
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.
我意識到ŧ他可能是不可能的,所以我會解釋我正在嘗試做什麼...我試圖更改節點的id,所以當我使用getNodeById
時,我可以使用我創建的新ID。這個想法是,如果我改變了ID,我可以在樹中找到它,它會是唯一的,因爲我只允許添加唯一的ID ...但ID不會改變。然後我認爲使用'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
我試過使用樹的同步方法,但沒有做任何事情。我只是想知道如何更新節點的ID,所以當我使用getNodeById
時,我可以使用新的ID。有什麼想法嗎?
請發表一些代碼你如何創建你的樹木店 – sha 2012-03-22 01:18:59
這有幫助嗎? – incutonez 2012-03-22 01:56:00