Ext JS 4: получить узел TreeStore с помощью internalId - PullRequest
1 голос
/ 22 марта 2012

Можно ли получить узел по его внутреннему идентификатору? Я попробовал:

Магазин

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, я могу использовать новый идентификатор. Есть мысли?

Ответы [ 3 ]

1 голос
/ 19 марта 2013

Попробуйте

var node = Ext.getCmp('myTree').queryById('ext-record-2');
1 голос
/ 24 декабря 2013

tree.getNodeById (...) найти только расширенный узел. Пожалуйста, ссылка getNodeById не работает

0 голосов
/ 22 марта 2012

Пара вещей:

  1. Попробуйте отладить его шаг за шагом.Т.е. отлаживать то, что вы получаете после Ext.getCmp (). Store и Ext.getCmp (). GetTreeRoot ().Проверьте, есть ли у узла дочерние элементы в массиве.

  2. Что именно представляет собой beginEdit / endEdit?NodeInterface не имеет этих методов.

  3. Почему вы пытаетесь изменить идентификатор?Мне просто любопытно - это очень необычное задание на мой вкус.

...