Itemclick和itemmove在EXTJS MVC中

时间:2012-09-07 15:04:24

标签: extjs treeview extjs4 extjs-mvc

我的视图中有一个树状面板及其相应的控制器。发生的事情是我有两个控制器,一个用于itemdblclick,另一个用于itemmove。 itemdblclick工作正常,但是当我为itemmove添加控制器时,itemmove正在工作,但另一方面,itemdbclick无效。如果我删除了itemmove控制器,则itemdblclick正在运行。希望不要混淆:)简单来说,两个控制器分开工作但不在一起。

  1. 有谁能告诉我这里我做错了什么。

  2. 此外,在控制器中的函数editRegion中,我尝试使用getStore.load()方法重新加载树,但是即使能够看到正在调用的存储中,也未加载树。萤火

  3. 编辑:

    在双击树节点时打开表单,在关闭表单时,我希望重新加载树面板。这就是我想在editregion函数中发生的事情

    查看

    {
                xtype : 'treepanel',
                title : '',
                id : 'hierarchyTree',
                border : false,
                alias : 'widget.hierarchyTree',
                height : 1000,
                viewConfig : {
                    enableDD : true,
                    plugins : {
                        ptype : 'treeviewdragdrop'
                    }
                },
                collapsible : false,
                useArrows : true,
                rootVisible : false,
                store : Ext.create('App.store.HierarchyTree'),
                displayField : 'Title',
                multiSelect : false,
                singleExpand : false,
    
    
            }
    

    控制器

    refs : [{
        ref : 'myHierarchyTree',
        selector : '#hierarchyTree'
    }
        init : function() {
    
        this.getHierarchyTreeStore().load();
    
    '#hierarchyTree' : {
                itemdblclick : this.itemdblclick
    
            },
            '#hierarchyTree' : {
                itemmove : this.itemmove
    
            }
    
    itemdblclick : function(view, record, level) {
    
    
        if (record.get('LevelID') == 1) {
    
            this.erWin = Ext.create('App.view.EditRegions');
            var f = this.getEditregionform().getForm();
            f.loadRecord(record);
            this.erWin.showWin();
        } 
    else if (record.get('LevelID') == 2) {
    
            this.eaWin = Ext.create('App.view.EditAreas');
            var f = this.getEditareaform().getForm();
            f.loadRecord(record);
            this.eaWin.showWin();
        }
    
    itemmove : function(v, oldParent, newParent, index, eOpts) {
        var nodeID = v.data.id;
        var oldParent = oldParent.data.id;
        var newParent = newParent.data.id;
        var index = index;
        var level = v.data.LevelID;
    
    Ext.Ajax.request({
            url : 'data/Locations.aspx',
            params : {
    
                mode : 'MOVENODE',
                currentNode : nodeID,
                oldParentNode : oldParent,
                newParentNode : newParent
    
            },
            success : function() {
                alert(LANG.SUC);
                Ext.getStore('HierarchyTree').load();
    
            },
            failure : function() {
    
            }
        });
    
    
    editRegion : function(button, record) {
    
        var fp = button.up('form');
    
        if (fp.getForm().isValid()) {
            fp.getForm().submit({
                url : 'data/Locations.aspx',
                params : {
                    mode : 'EDITREGION',
                    userID : ME.UserID,
                    RegionID : ME.RegionID
                },
                success : function(response) {
                    alert(LANG.SUC);
                    this.getHierarchyTreeStore().load();
    
    
                },
                failure : function(response) {
                    alert('Try again');
                }
            });
        }
    }
    

2 个答案:

答案 0 :(得分:1)

单独添加它们将导致第一个侦听器对象被覆盖。

修正:

       '#hierarchyTree' : {
            itemdblclick : this.itemdblclick,
            itemmove : this.itemmove
        },

您应该检查商店是否相同。意思是检查id,因为我认为控制器初始化一个商店而面板另一个。所以检查this.getHierarchyTreeStore().id是否与treepanel中的那个相同。你可以从button.up().down('treepanel').getStore().id之类的按钮导航到它。如果它们不同,那么你应该使用第二种方法来获得商店。

答案 1 :(得分:0)

尝试执行以下代码,因为使用up和down不会引用正确的视图,因为树和表单是完全不同的视图

    var view = Ext.widget('hierarchy');
view.down('treepanel').getStore.load();

现在,即使商店正在重新加载,也会出现错误

TypeError: view.down("treepanel") is null

view.down('treepanel').getStore.load();