如何覆盖dojo的domReady

时间:2015-01-14 14:59:17

标签: dojo

我想覆盖dijit._CssStateMixin的domReady()方法。 有没有办法覆盖它而不是改变Dojo中的监听器机制。

我尝试在简单的javascript中覆盖_cssMouseEvent()方法,但它仍然从domReady()调用dijit的_cssMouseEvent()。

我尝试了以下方法:

 dojoConfig = {
        map: {
            'dijit/_CssStateMixin': {
                    'dojo/domReady': 'app/noop'
            }
    }
}; 

我添加了应用程序'文件夹然后' noop.js'在里面。 noop.js中没有任何内容:

    define([], function () {
    return function () {};
});

即使在此之后,我也可以看到dijit.js的_CssStateMaxin domReady()从listener.apply调用(下面粘贴的代码片段)

var addStopImmediate = function(listener){
        return function(event){
            if(!event.immediatelyStopped){// check to make sure it hasn't been stopped immediately
                event.stopImmediatePropagation = stopImmediatePropagation;
                return listener.apply(this, arguments);
            }
        };
    }

1 个答案:

答案 0 :(得分:0)

如果您的最终目标是阻止domReady dijit/_CssStateMixin回调运行,那么您最简单的赌注可能会将dojo/domReady重新映射到不同的模块通过dijit/_CssStateMixin加载时,完全调用回调。

注意:剥离这些处理程序可能会对继承_CssStateMixin的Dijit小部件产生不利的视觉效果,因为它可能会阻碍与悬停和焦点相关的Dijit CSS类的应用。但如果您担心_CssStateMixin妨碍了表现,那么至少值得尝试确认或否认您的怀疑。

首先,我们必须创建一个简单的模块,该模块返回一个什么都不做的函数,我们稍后会在dojo/domReady加载时替换dijit/_CssStateMixin,这样它仍然可以调用domReady但是它不会执行它传递的回调。

为简单起见,我假设您已经拥有一个可以轻松添加模块的自定义程序包;对于这个例子,我假设它被称为app。让我们创建app/noop

define([], function () {
    return function () {};
});

现在让我们配置加载程序,以app/noop代替dojo/domReady,而不是dijit/_CssStateMixin加载{<1}}:

var dojoConfig = {
    ...,
    map: {
            'dijit/_CssStateMixin': {
                    'dojo/domReady': 'app/noop'
            }
    },
    ...
};

现在应该不再运行有问题的domReady回调。

如果您对map感到好奇,可以在此SitePen FAQ中详细了解相关内容。