2012-03-16 2 views
0

Я новичок в EXT, и у меня возникла проблема с перезагрузкой дерева EXT 4. Я пытался с:Ext4 reload tree

Ext.tree.getLoader().load(tree.root); 
Ext.tree.load(tree.root); 
Ext.tree.getRootNode().reload(); 
Ext.tree.TreePanel.root.reload(); 
Ext.data.TreeStore.reload(); 

И ничего не помогало, я надеюсь, что кто-то может разъяснить мне это, вот код: Edit: я добавил полный код, как вы можете видеть все внутри метода extOnReady, Я удалил вар перед тем вар дерева и до сих пор я получил тот же результат

Ext.QuickTips.init(); 

var store = Ext.create('Ext.data.TreeStore',{ 
    proxy: { 
     type: 'ajax', 
     url: 'url1' 
    }, 
    root: { 
     text: 'TOPP', 
     id: '1', 
     expanded: true 
    }, 
    folderSort: true, 
    sorters: [{ 
     property: 'text', 
     direction: 'ASC' 
    }] 
}); 

tree = Ext.create('Ext.tree.Panel',{ 
    id:'company_tree', 
    store: store, 
    viewConfig: { 
     plugins: { 
      ptype: 'treeviewdragdrop' 
     } 
    }, 
    renderTo: 'tree-div', 
    height: 300, 
    width: 766, 
    title: gettext('Companies'), 
    useArrows: true, 
    dockedItems: [{ 
     xtype: 'toolbar', 
     items: [ { 
      text: gettext('Collapse All'), 
      handler: function(){ 
       tree.collapseAll(); 
      } 
     }] 
    }] 
}); 
var loadingMask = new Ext.LoadMask(Ext.get('tree-div'),{ 
    msg: gettext("Loading...") 
}); 

tree.on('itemmove', function(tree, oldParent, newParent, index, options){ 

    if(confirm(gettext('Are you sure you want to move this company?'))){ 
     loadingMask.show(); 
     Ext.Ajax.request({ 
      scope: this, 
      url: 'url2/', 
      success:function(){ 
       loadingMask.hide(); 
      }, 
      params: { 
       'ajaxAction[moveNode]': '', 
       index: index, 
       nodeid: tree.data.id, 
       parentNodeID: newParent.data.id, 
       oldParentNodeID: oldParent.data.id 
      } 
     }); 
    }else{ 
     Ext.getCmp('company_tree').getStore.load(); 
    } 
}); 

Кроме того, я попытался перезагрузить через консоль [Ext.getCmp («company_tree») getStore.load();.], и она работала. Когда я пытаюсь его через код возвращает ошибку относительно функции зольной

n is null 
[Break On This Error] 

Ext.fly(n.firstChild ? n.firstChild : n).highlight(me.dropHighlightColor); 

ответ

2

Вы действительно пытаетесь вызывать эти методы непосредственно на Ext.tree имен или Ext.tree.TreePanel класса? Если это так, вам действительно нужно просвещать себя о различии между объектами и классами.

И не пытайтесь угадать, как можно назвать метод. Если бы вы посмотрели его с manual, вы бы узнали, что нет такого метода, как reload в Tree, TreeStore или TreeView.

Что вам нужно позвонить, чтобы перезагрузить дерево является load метод TreeStore:.

tree.getStore().load(); 
+0

tree.getStore не является функцией [Перерыв об этой ошибке] \t tree.getStore() нагрузки(); У меня эта ошибка Я понимаю, что дерево - это объект, а Ext.tree.Panel - это класс. И я пытаюсь сделать это на объекте (дереве) –

+0

Вы уверены, что 'tree' действительно является экземпляром' Ext.tree.Panel', когда вы вызываете 'getStore()' на нем? Добавьте 'console.log (tree)' над этим, чтобы узнать, что удерживает переменная 'tree'. –

+0

@SrdjanRadisa также, если вы определяете 'var tree' внутри' Ext.onReady', переменная 'tree' _local_ будет по-прежнему не определена вне внешней среды' Ext.onReady', это ошибка, которую делают некоторые люди, когда они начинают сначала ExtJS. Это приведет к ошибке, например, 'tree.getStore не является функцией', потому что неопределенная переменная' tree' не имеет никаких функций. Вы можете сделать его глобальной переменной, удалив слово «var» в 'var tree =' или просто ссылаясь на него правильно, используя конфигурацию 'itemId' или' id' на вашем дереве. – Geronimo