【问题标题】:How to fire event from menu item in view and catch it in controller in ExtJS?如何从视图中的菜单项触发事件并在 ExtJS 的控制器中捕获它?
【发布时间】:2016-01-13 05:19:12
【问题描述】:

我在 ExtJS 中有一个要求,在单击菜单项时,我必须从视图中触发一个事件并在控制器中捕获它。

以下是我的方法,但它不起作用。调试时,Control 即将到来,直到触发事件,但它没有在控制器中捕获(不会进入 onResetAction 函数)

请帮帮我。

查看:

new Ext.menu.Menu ({
                    width: 150,
                    height: 100,
                    itemId: 'menuItem123',
                    margin: '0 0 0 0',
                    items: menuOptions,
                    listeners:{
                        'click': function(menu, menuItem, e, eOpts)
                        {
                            if(menuItem.text === 'Inherit') {
                                 var viewConfig = {
                                            'viewName': 'Preference',
                                            'preferenceElement': preferenceElement,
                                            'scope': menu
                           };
                           menuItem.fireEvent('resetData', viewConfig);

                           }
                            this.hide();
                        }
                    }
                });

控制器:

init: function(application) {

    this.listen({

        component: {                
            'container[itemId=menuItem123] menuItem[text=Inherit]': {
                'resetData': this.onResetAction,
                'refreshLogoData': this.onRefresh
            }
        }
    }); 
},

onResetAction: function(viewConfig) {

  var me = this;

  /* some function*/

},

【问题讨论】:

    标签: javascript jquery extjs extjs-mvc


    【解决方案1】:

    我猜您的选择器不起作用,您可以使用Ext.ComponentQuery.query()Ext.all() 进行检查。

    如果这是问题所在,请尝试从以下位置更改选择器:

    'container[itemId=menuItem123] menuItem[text=Inherit]'
    

    到:

    '#menuItem123 menuItem[text=Inherit]'
    

    【讨论】:

      【解决方案2】:

      试试这个

      init: function(application) {
          var me = this;
      
          this.control({
              '#menuItem123 menuitem': { //menuitem all small
                  resetData: me.onResetAction,
                  refreshLogoData: me.onRefresh
              }
          }); 
      },
      
      onResetAction: function(viewConfig) {
      
        var me = this;
      
        /* some function*/
      
      },
      

      这是一个类似模式的小提琴:https://fiddle.sencha.com/#fiddle/13p7

      【讨论】:

      • @AmithSwamy,如果这回答了您的问题,请将其标记为您的问题的答案以关闭线程。为此,请单击您的问题旁边的复选标记。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多