我想覆盖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);
}
};
}
答案 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中详细了解相关内容。