2014-01-06 157 views
0

我有一个菜单3项。如果某个条件为真,我想在渲染页面之前模拟一个项目点击,例如设置要选择的默认操作。我动态地创建我的菜单。模拟菜单项点击

Store.each(function(n) { 
    var rec = n; 

     var menuItem = new Ext.menu.Item({ 
      text: rec.data.name, 
      value: rec.data.url, 

     }); 

     Menu.add(menuItem); 

     //if some condition set item as if it was clicked(selected) 

}); 

我想设置一个菜单中的某个项目作为活动,就像它被点击一样。

+0

您是试图实际点击菜单项,还是只是突出显示? – lmno

+0

点击它就好像它被选中一样 – Jacob

+0

请看修改后的答案。 – lmno

回答

0

如果您使用.fireEvent()方法,您可以在菜单项上触发一个click事件。

所以,

if(some condition){ 
    menuItem.fireEvent('click'); 
} 

此外,您将需要在菜单项的监听器捕获此事件

var menuItem = new Ext.menu.Item({ 
    text: "menu Item", 
    listeners:{ 
     click:function(){ alert("you clicked the menu item"); } 
    } 
}); 

这里是一个工作示例: http://jsfiddle.net/9Lpg7/

最后,我想想补充一点,fireEvent()我不是完全必要的。由于menuItem具有handler配置,因此您可以简单地在别处定义函数,并将其用作menuItem处理程序,并在条件为真时调用它。

var myClickFunction = function(){ alert("cooler way"); } 

var menuItem = new Ext.menu.Item({ 
    text: "menu Item", 
    handler:myClickFunction 
}); 

if(some condition){ 
    myClickFunction(); 
} 
+0

对不起,但它似乎并没有引发事件。 – Jacob

+0

问题是菜单设置在一个按钮下。 – Jacob

+0

请您详细说明为什么在按钮下是一个问题?如果你使用第二种方法,它应该不会影响菜单(或menuItem)的位置。 – lmno