Ext JS 4:通过internalId获取TreeStore节点

时间:2012-03-22 00:30:16

标签: extjs tree extjs4 store

是否可以通过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。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

尝试

var node = Ext.getCmp('myTree').queryById('ext-record-2');

答案 1 :(得分:1)

tree.getNodeById(...)仅查找已展开的节点。请参考getNodeById does not work

答案 2 :(得分:0)

夫妻俩:

  1. 尝试逐步调试它。即在Ext.getCmp()。store和Ext.getCmp()。getTreeRoot()之后调试你得到的内容。检查节点是否有阵列中的任何子节点。

  2. beginEdit / endEdit究竟是什么? NodeInterface没有这些方法。

  3. 您为什么要尝试更改ID?我只是好奇 - 根据我的口味,这是非常不寻常的任务。