是否可以通过internalId获取节点?我试过了:
商品
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'id会确保我返回一个唯一的ID,但后来我无法理解,哈哈。
以下是一些显示我想要做的事情的代码。
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。有什么想法吗?
答案 0 :(得分:1)
尝试
var node = Ext.getCmp('myTree').queryById('ext-record-2');
答案 1 :(得分:1)
tree.getNodeById(...)仅查找已展开的节点。请参考getNodeById does not work
答案 2 :(得分:0)
夫妻俩:
尝试逐步调试它。即在Ext.getCmp()。store和Ext.getCmp()。getTreeRoot()之后调试你得到的内容。检查节点是否有阵列中的任何子节点。
beginEdit / endEdit究竟是什么? NodeInterface没有这些方法。
您为什么要尝试更改ID?我只是好奇 - 根据我的口味,这是非常不寻常的任务。