Hack dojo codes with dojo&aposs util

dojo.lang.extend(dojo.widget.PopupMenu2, {
    onOpen: function(e){
        this.openEvent = e;
        var x = e.pageX, y = e.pageY;

        var win = dojo.html.getElementWindow(e.target);
        var iframe = win._frameElement || win.frameElement;
        if(iframe){
            var cood = dojo.html.abs(iframe, true);
            x += cood.x - dojo.withGlobal(win, dojo.html.getScroll).left;
            //override the onOpen to reslove the problem the context popup menu open under the selected TreeNode.
            if (!(e.type == "contextmenu" && dojo.render.html.ie))
                y += cood.y - dojo.withGlobal(win, dojo.html.getScroll).top;
        }
        this.open(x,y, null, [x, y]);

        e.preventDefault();
        e.stopPropagation();
    }
});

这样我们就是复写了dojo.widget.PopupMenu2类的onOpen方法。如果我们想调用覆盖以前的方法。
//backup the old function
dojo.widget.TreeBasicControllerV3.prototype.oldOnKey =dojo.widget.TreeBasicControllerV3.prototype.onKey;
dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {
    onClick: function(e) {
        if (e.target.tagName == "INPUT")
            return ;
        // default click handler just sets the focus
        var treeWidget = this.getWidgetByNode(e.currentTarget);
        if (!treeWidget || !treeWidget.isTree) { return; }
        var nodeWidget = this.getWidgetByNode(e.target);
        if (!nodeWidget || !nodeWidget.isTreeNode) { return; }
        this._focusLabel(treeWidget, nodeWidget);
    },
    onKey: function (e){
        if (e.target.tagName == "INPUT")
            return ;
        this.oldOnKey(e);
    }
});

dojo.lang.extend这个方式是多么的方便。我们可以用这个方法方便的扩展或修改以有的代码。

看看dojo的dojo.lang.common  里面包括了对象间的一些操作。如dojo.lang.inherits, dojo.lang.mixin etc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值