Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为extjs网格创建上下文菜单_Extjs_Grid_Contextmenu - Fatal编程技术网

如何为extjs网格创建上下文菜单

如何为extjs网格创建上下文菜单,extjs,grid,contextmenu,Extjs,Grid,Contextmenu,我可以为树创建上下文菜单并附加到“上下文菜单”事件。 代码: 但是如何为网格元素创建上下文菜单呢?好吧,根据您想要做的事情,您可以用与示例相同的方式处理以下GridPanel事件:、、、、。首先定义上下文菜单 然后为所需事件创建侦听器。记住停止事件的默认行为非常重要,这样您就可以用自己的行为替换它。如果不调用event.stopEvent()方法停止事件冒泡,则无论您执行何种操作,浏览器的默认上下文菜单都将出现。 对于extjs4,在网格中添加以下内容: listeners: { itemc

我可以为树创建上下文菜单并附加到“上下文菜单”事件。 代码:


但是如何为网格元素创建上下文菜单呢?

好吧,根据您想要做的事情,您可以用与示例相同的方式处理以下
GridPanel
事件:、、、、。

首先定义上下文菜单

然后为所需事件创建侦听器。记住停止事件的默认行为非常重要,这样您就可以用自己的行为替换它。如果不调用event.stopEvent()方法停止事件冒泡,则无论您执行何种操作,浏览器的默认上下文菜单都将出现。


对于extjs4,在网格中添加以下内容:

listeners: {
  itemclick: function(view, record, item, index, e, options){
    menuContext.showAt(e.xy);
  }
}

与上面提供的菜单上下文相同。

必须在网格中添加此属性,例如:

viewConfig: {
            stripeRows: true,
            listeners: {
                itemcontextmenu: function(view, rec, node, index, e) {
                    e.stopEvent();
                    contextMenu.showAt(e.getXY());
                    return false;
                }
            }
        },
  • 创建控制器文件
  • 创建一个视图文件

        init : function() {
            this.control(
    
                       'countrylist' : {
    
                            itemcontextmenu : this.contextMenuBox
    
                        }
                    });
            },
    
            contextMenuBox:function( view, record, item, index,  e, eOpts ){
    
    
    if(record.data.status=='Y'){
    
    var menu = Ext.create('Ext.menu.Menu',{
                items: [{
                            text: 'Do something'
                        }]
                        });
                        e.stopEvent();
                        menu.showAt(e.getXY());
    
    
            }
            else{
                var menu = Ext.create('Ext.menu.Menu',{
                items: [{
                            text: 'Don\'t'
                        }]
                        });
                        e.stopEvent();
                        menu.showAt(e.getXY());
    
    
            }
    
            },
    

  • 没有关于定义上下文菜单的信息。其他答案更适合我的需要,我相信其他人的。@George:OP已经在最初的问题中定义了他的上下文菜单,因此不需要帮助。在我回答这个问题14个月后就因为你更喜欢最近的答案而投票否决我,这有点站不住脚。我的回答在任何方面都不是无效或不恰当的。事实上,我的答案提供了网格提供的要处理的事件的具体列表,而您的首选答案没有。对每个人来说,他自己的,但通常是反对票被用来表示错误的答案,而不仅仅是你个人的偏好。谢谢。@Brian您的答案不完整,因为它没有提到event.stopEvent。因为你的答案是公认的,但在我看来,我的需要是不完整的,其他像我一样的人可能会通过谷歌发现这一点,所以我认为让你下面的答案脱颖而出是很重要的,评分为6比3,而不是5比4。很抱歉,仅仅失去2分的代表让你觉得有必要对我个人进行抨击,我花了自己的代表1分来继续为ExtJS 6制作更好的资源,
    event.xy
    应该改为
    event.getXY()
    否则它将显示在左上角。这不允许您访问菜单处理程序函数中正在单击的网格中的项目(上下文)。所以这不是一个上下文菜单,它只是一个恰好位于网格上的菜单。
    listeners: {
      itemclick: function(view, record, item, index, e, options){
        menuContext.showAt(e.xy);
      }
    }
    
    viewConfig: {
                stripeRows: true,
                listeners: {
                    itemcontextmenu: function(view, rec, node, index, e) {
                        e.stopEvent();
                        contextMenu.showAt(e.getXY());
                        return false;
                    }
                }
            },
    
        init : function() {
            this.control(
    
                       'countrylist' : {
    
                            itemcontextmenu : this.contextMenuBox
    
                        }
                    });
            },
    
            contextMenuBox:function( view, record, item, index,  e, eOpts ){
    
    
    if(record.data.status=='Y'){
    
    var menu = Ext.create('Ext.menu.Menu',{
                items: [{
                            text: 'Do something'
                        }]
                        });
                        e.stopEvent();
                        menu.showAt(e.getXY());
    
    
            }
            else{
                var menu = Ext.create('Ext.menu.Menu',{
                items: [{
                            text: 'Don\'t'
                        }]
                        });
                        e.stopEvent();
                        menu.showAt(e.getXY());
    
    
            }
    
            },