ExtJS:在运行时向 Menu 实例添加新的 MenuItem

Posted

技术标签:

【中文标题】ExtJS:在运行时向 Menu 实例添加新的 MenuItem【英文标题】:ExtJS: add new MenuItem to Menu instance at runtime 【发布时间】:2012-09-14 10:13:28 【问题描述】:

我需要在运行时添加一个新创建的 MenuItem;所以我的代码目前看起来像:

var myMenu = myCmp.query('mymenu')[0]; // retrieve my only Menu object
var menuItem = Ext.create('Ext.menu.Item', 
    itemId: 'myItemId', text: 'textGoesHere'
);
myMenu.add(menuItem);

我正在使用add method 添加项目;但是在运行时菜单项没有任何反应。尽管调试显示新项目实际上已添加到 Menu 实例的 items 配置中。

在运行时使用remove method 确实有效。

问题:如何让新添加的MenuItem在运行时显示?我错过了什么?

更新:上面的代码有效;我有一个有缺陷的 switch 语句,导致另一个逻辑通过,删除了最后创建的 menuItem。

【问题讨论】:

您是否尝试过仅应用一个配置?也许有一个错误?基本上这应该是开箱即用的,不需要任何额外的调用。 @sra 我同意你的观点,它应该开箱即用。 “仅应用配置”是什么意思?谢谢。 我发布了一个有效的示例。如果您需要其他信息/帮助,请告诉我 【参考方案1】:

评论提升

OP 写的

好的,我会追踪问题;我有一个有缺陷的 switch 语句 导致另一个通过逻辑,删除最后创建的 菜单项。我仍然会将您的答案标记为正确,因为它也有效 (通过传递配置 obj)。


这个例子有效:

var menu = Ext.create('Ext.menu.Menu', 
   width: 100,
   height: 100,
   floating: false,  // usually you want this set to True (default)
   renderTo: Ext.getBody(),  // usually rendered by it's containing component
   items: [
       text: 'icon item',
       iconCls: 'add16'
   ,
       text: 'text item'
   ,
       text: 'plain item',
       plain: true
   ]
);

menu.add(text:'test');

我不太确定,但根据 API,当您查看 menu 时,Menu 将面板作为默认类型,但根据 menuitem API,它似乎是 menuitem 这可能有点令人困惑。

【讨论】:

好的,我追踪问题;我有一个有缺陷的switch 语句导致另一个逻辑通过,删除了最后创建的menuItem。我仍然会将您的答案标记为正确,因为它也可以正常工作(通过传递配置 obj)。 @sra 您能否更新答案以在最顶部说 OP 的答案 确实有效 原样?我第一次来这里时没有阅读 cmets,然后开始疯狂追逐,试图强制对作为配置对象添加的菜单项进行热切渲染。为了澄清,OP的方法确实工作,完全一样。

以上是关于ExtJS:在运行时向 Menu 实例添加新的 MenuItem的主要内容,如果未能解决你的问题,请参考以下文章

在运行时向对象添加属性,并保存到数据库

安装包时向 .env 添加新的环境变量

ExtJS 将事件处理程序动态添加到列编辑器

在运行时向 Gridview 动态添加行

ExtJS - 动态添加复选框到表单

使用 h2o.init() 连接到外部实例时向 H2O 添加额外的 jar