Как перезагрузить панель дерева в extjs4? - PullRequest
1 голос
/ 18 октября 2011

У меня есть форма и дерево панелей, когда я отправляю эту форму, я хочу обновить свое дерево новыми добавленными данными.

, так что это код кнопки отправки в моей форме (вы можете видеть всея пытался, это беспорядок извините)

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 Ответ

1 голос
/ 19 октября 2011

чтобы перезагрузить древовидное хранилище, вы можете сделать tree.getStore().load, конечно, вам нужно как-то получить ссылку на tree, прежде чем вы позвоните. Ссылка на документ Sencha: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.TreeStore-method-load

однако, если предполагается, что отправка вашей формы ДОБАВЛЯЕТ что-то к дереву, ваш код потенциально может иметь проблемы с синхронизацией, поскольку отправка формы асинхронна. Вы хотели бы вызвать функцию обновления дерева внутри обработчика успеха отправки формы.

...