我想重写dijit.CssStateMixin的domReady()方法。是否有任何方法可以替代Dojo中的侦听器机制来覆盖它。
我尝试用简单的javascript重写_cssMouseEvent()方法,但它仍然从domReady()调用dijit的_cssMouseEvent()。
我尝试了以下方法:
dojoConfig = {
map: {
'dijit/_CssStateMixin': {
'dojo/domReady': 'app/noop'
}
}
}; 我添加了'app‘文件夹,然后'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);
}
};
}发布于 2015-01-15 03:42:29
如果您的最终目标是阻止domReady回调在dijit/_CssStateMixin中运行,那么您最简单的赌注可能是在通过dijit/_CssStateMixin加载时,将dojo/domReady重新映射到一个根本不调用回调的不同模块。
注意:去掉这些处理程序的可能会对继承_CssStateMixin的Dijit小部件产生不良的视觉效果,因为它可能会阻碍与悬停和焦点相关的Dijit类的应用。但是,如果你担心_CssStateMixin妨碍了你的表现,那么至少值得一试来确认或否认你的怀疑。
首先,我们必须创建一个简单的模块,它返回一个什么都不做的函数,稍后我们将在dojo/domReady被dijit/_CssStateMixin加载时替代它,这样它仍然可以调用domReady,但是它不会执行它传递的回调。
为了简单起见,我假设您已经有了一个定制包,您可以轻松地向其中添加一个模块;在本例中,我假设它名为app。让我们创建app/noop
define([], function () {
return function () {};
});现在,让我们将加载程序配置为映射app/noop,而不是dojo/domReady,特别是在dijit/_CssStateMixin加载时
var dojoConfig = {
...,
map: {
'dijit/_CssStateMixin': {
'dojo/domReady': 'app/noop'
}
},
...
};现在,不应该再运行违规的domReady回调了。
如果您对map感兴趣,可以在这个SitePen常见问题中阅读更多有关它的信息。
https://stackoverflow.com/questions/27945875
复制相似问题