2011-10-18 33 views
1

我有一个表单和一个面板树,当我提交这个表单时,我想用新添加的数据刷新我的树。如何在extjs4中重新加载树面板?

,所以这是我的形式 提交按钮代码(u能看到的一切我试过,其一团糟抱歉)

buttons: [{  
    text: 'Save', 
    handler: function() { 
     this.up('form').getForm().submit({ 
      url: 'AddData.ashx', 
      params: { action: 'addasset' }, 
      success: function (form, action) { 
       Ext.MessageBox.show({ 
        title: 'Success !', 
        msg: 'Asset added successfully<br />', 
        icon: Ext.MessageBox.INFO 
       }) 
      } 
     }) 

     //refresh tree 
     //  var at = Ext.getCmp('atree'); at.getLoader.load(at.getRootNode(Ext.decode(objt.TreeToJson()))); 
     //  ATreeStore.loadData(Ext.decode(objt.TreeToJson())); 
     //  var at = Ext.getCmp('atree'); 
     //  at.getView().getTreeStore().setRootNode(at.getView().getTreeStore().getRootNode().getChildAt()); 
     //  at.getView().refresh();       
     //  Ext.ComponentQuery.query('treepanel')[4].getStore().load(); 
     //  Ext.ComponentQuery.query('assettree')[0].setRootNode(Ext.decode(objt.AssetTreeToJson())); 
     //  ATreeStore.setRootNode(ATreeStore.getRootNode().getChildAt()); 
     //  ATreeStore.load();  

     ATreeStore.setRootNode(Ext.decode(objt.TreeToJson())); 
    } 
}, { 
    text: 'Cancel', 
    handler: function() { 
     this.up('form').getForm().reset(); 
    } 
}] 

这里是我的树代码(不要对conext菜单,即时通讯担心仍然努力使工作)

window.ATreeStore = Ext.create('Ext.data.TreeStore', { 
    root: Ext.decode(objt.TreeToJson()) 
}); 

var myContextMenu = new Ext.menu.Menu({ 
    items: [{ 
     text : 'Edit' 
    }, { 
     text: 'Delete' 
    }] 
}); 

Ext.define("Ext.app.ATree", { 
    extend: "Ext.tree.Panel", 
    alias:"widget.atree", 
    title: ' my tree', 
    height: 200, 
    //id: 'atree', 
    layout: 'fit', 
    //width: 300, 
    border: false, 
    store: ATreeStore, 
    //rootVisible: false, 
    useArrows: true, 
    frame: true, 
    closable: true, 
    collapsible: true, 
    animCollapse: true, 
    draggable: true, 
    resizable: true, 
    margin: ' 5 5 5 5', 

    dockedItems: [{ 
     xtype: 'toolbar', 
     items: [{ 
      text: 'reload', 
      handler: function() { 
       Ext.ComponentQuery.query('atree')[0].setRootNode(Ext.decode(objt.AssetTreeToJson())); 
      } 
     }, { 
      text: 'delete', 
      handler: function (record) { 
       alert(record.data.id) 
      } 
     }] 
    }], 

    listeners: { 
     itemcontextmenu: 
     function (node, event) { 
      node.select(); 
      myContextMenu.showAt(event.xy); 
     } 
    } 
}); 

回答

1

重装树商店,你可以做当然tree.getStore().load你需要打电话,不知怎的之前得到一个参考tree。 Sencha文档参考: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.TreeStore-method-load

但是,如果您的表单提交应该添加一些东西到树中,您的代码可能有时间问题,因为表单提交是异步的。你会想要在表单提交的成功处理程序中调用树刷新功能。

+0

谢谢你,我已经试过这个,问题是它实际上重新加载,但它显示一个空树! – Armance

+0

嗯...我看到你的treestore没有定义代理,你在加载静态树数据吗? – Chao

+0

没有它的动态,我用这个函数从我的数据库中读取我的数据Ext.decode(objt.TreeToJson()),我试着首先使用代理,但它要求一个URL,我没有我的数据在一个页面或什么的,我需要使用该功能! – Armance