如何将dijit.Menu与dijit.Tree的特定节点关联(绑定)

mor*_*mel 3 dojo

我已经能够将一个带有两个MenuItem的简单dijit.Menu绑定到一个dijit.Tree与Menu.bindDomNode(Tree.domNode)的节点,但我想改进哪些节点获取上下文菜单并且无法获取domNodes从Tree项目绑定菜单.我希望有一个更简单的方法来做到这一点?

    datStore = this.DataStore;

    mdl = this.Model;

    tree = this.Tree;

    datStore.fetch({

        query: { nodeType: "ROOT" },
        onItem: function(item, request) {

            dojo.forEach(datStore.getValues(item, "children"), function(childItem) {

  var itemNode = tree.getNodesByItem(mdl.getIdentity(childItem));

  console.log(itemNode): //returns the widget, and the widget has a domNode property that seems ok with firebug traversing of the itemNode object, though the div value is 'dimmed' in firebug (not valid node yet in the DOM?)

                console.log(itemNode.domNode);//returns 'undefined', so the binding below does not work

                if (childItem.nodeType == "MATCHED_VALUE") {

                   Menu.bindDomNode(itemNode.domNode);

                }

            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

Dan*_*Man 7

如果您不喜欢使用像"_openMyself"这样的伪私有方法,也可以使用菜单的onFocus事件.您应该右键单击更改当前选定的节点.

var tree = new dijit.Tree({
    onMouseDown:function(ev,node){
        if(ev.button==2){ // right-click
            var here=dijit.getEnclosingWidget(ev.target);
            this.set('selectedNode',here);
        }
    }
});
var menuItem=new dijit.MenuItem({...});
var myMenu = new dijit.Menu({
    onFocus:function(){
        var selected=tree.selectedItem;
        // do stuff here like:
        menuItem.attr('disabled',(selected.children)?true:false);
    }
});
myMenu.addChild(menuItem);
myMenu.bindDomNode(tree.domNode);
Run Code Online (Sandbox Code Playgroud)

由于臭名昭着的缺乏Dojo文档,这花了我几个小时的试验和错误才发现.这就是为什么我在这里发布这个问题,问题发生2年后.