2013-03-08 4 views
1

В ExtJs3 моя команда сделала следующее, чтобы загрузить данные в treestore. Каков эквивалентный способ сделать это в ExtJS4? Когда я делаю аналогичный код с помощью NodeInterface, я получаю сообщение «Can not read property» 0 «null».Вручную/динамически загружать данные в панель дерева?

Ext.Ajax.request({ 
      url: servlet, 
      success: function(response, opts) 
      { 
       var jsonData = Ext.decode(response.responseText); 

       var root = new Ext.tree.AsyncTreeNode({ 
        text: 'Root test', 
        draggable: false, 
        id: 'root', 
        children: jsonData.tree.data 
       }); 
       tree.setRootNode(root); 
//... 

Обновление: мне все равно, как это сделать. У меня только два требования: (1) использовать один запрос сервера для получения несвязанных данных. (2) повторно использовать древовидные и сетчатые панели для разных данных

Я смог загрузить данные в динамически созданные древовидные панели. Однако использование setRootNode() не работает с существующими панелями дерева.

//this works 
var tree = Ext.create('Ext.tree.Panel', { 
      root: { 
       text:'Application', 
       expanded:true, 
       children: jsonResponse.categoryTree.data 
      } 
     }); 

//this doesn't work 
existingTree.setRootNode(root); 
+0

Чтобы быть откровенным, в extjs4 это будет выглядеть совершенно иначе. Я просто не уверен, сколько вам нужно, чтобы придерживаться части кода, который у вас выше. Но вкратце: 'NodeInterface' используется для украшения экземпляров модели, принадлежащих' TreeStore'. Вообще говоря, вы никогда не должны использовать этот класс. Не можете ли вы просто перенести код в правильный стиль extjs4? – Izhaki

+0

@lzhaki посмотреть мое обновление –

ответ

0

До сих пор "достаточно хорошо" решением является

  1. Переверните панель дерева в класс

Каждый раз, когда данные изменения:

  1. Исключить предыдущий экземпляр (если есть) панели дерева
  2. Instanti ели новую деревянную панель

Не путь «Ext JS 4», но он выполняет свою работу. Если кто-нибудь не сможет просветить меня правильным способом делать вещи, я отмечу это как ответ.

   var panel = Ext.ComponentQuery.query('panel#categorysearch')[0]; 

       //destroy the tree panel 
       panel.remove('categorysearchtree', true); 

       //create a new one 
       var tree = Ext.create('MyApp.view.CategorySearchTreePanel', { 
        root: { 
         text:'Services', 
         expanded:true, 
         children: jsonResponse.categoryTree.data 
        } 
       }); 

       panel.add(tree);