如何根据 dojo dijit 中的复选框条件启用和禁用上下文菜单?

how to enable and disable the context menu based on checkbox condition in dojo dijit?

function(Menu, MenuItem){
    var pMenu = null;
    pMenu = new Menu({
        targetNodeIds: ["progmenu"]
    });
    pMenu.addChild(new MenuItem({
        label: "Simple menu item",
        onClick: function(){
            pMenu.destroy();
        }
    }));

这会在 div 上创建上下文菜单,但我想在未选中时禁用上下文菜单,并在 checked.can 有人帮助我时再次启用它.. 我的 html 页面是..

<div id="progmenu" >
        <input type="checkbox" /> click </div> 

dijit/Menu本身是没有办法被禁用的,但是,每个dijit/MenuItem都可以通过disabled 属性.

来禁用

因此,如果您想禁用菜单,请使用 dijit/Menu::getChildren() 遍历所有子菜单,然后设置 属性。

要获取复选框的状态,您可以使用 dojo/ondojo/query 向其添加一个 onChange 事件处理程序,并且使用 event.target.checked 您可以检查是否是否检查过。

例如:

query("#progmenu input[type=checkbox]").on("change", function(evt) { // On change
    pMenu.getChildren().forEach(function(child) { // Loop over children
        child.set('disabled', evt.target.checked); // Set disabled state
    });
});

可以在 JSFiddle 上找到演示:http://jsfiddle.net/659t7dfj/

注意事项,我正在使用 Array.prototype.forEach() 来遍历菜单项。如果您需要支持旧版浏览器,则必须切换到常规循环或使用 dojo/_base/array 实用程序模块。