如何覆盖 dojo 的 domReady
How to override dojo's domReady
我想覆盖 dijit._CssStateMixin 的 domReady() 方法。
有什么方法可以覆盖它而不是更改 Dojo 中的侦听器机制。
我尝试简单地覆盖 _cssMouseEvent() 方法 javascript,但它仍然会从 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);
}
};
}
如果您的最终目标是防止 dijit/_CssStateMixin
中的 domReady
回调来自 运行ning,您最简单的选择可能是将 dojo/domReady
重新映射到不同的通过 dijit/_CssStateMixin
.
加载时根本不调用回调的模块
注意: 剥离这些处理程序可能会对继承 _CssStateMixin
的 Dijit 小部件产生不利的视觉影响,因为它可能会阻碍 Dijit 的应用 CSS 类 与悬停和焦点相关。但是,如果您担心 _CssStateMixin
会影响性能,那么至少值得尝试确认或否认您的怀疑。
首先我们必须创建一个简单的模块,其中 returns 一个什么都不做的函数,稍后我们将在 dijit/_CssStateMixin
加载时替换 dojo/domReady
,这样它仍然可以调用 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 FAQ.
中阅读更多相关信息
我想覆盖 dijit._CssStateMixin 的 domReady() 方法。 有什么方法可以覆盖它而不是更改 Dojo 中的侦听器机制。
我尝试简单地覆盖 _cssMouseEvent() 方法 javascript,但它仍然会从 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);
}
};
}
如果您的最终目标是防止 dijit/_CssStateMixin
中的 domReady
回调来自 运行ning,您最简单的选择可能是将 dojo/domReady
重新映射到不同的通过 dijit/_CssStateMixin
.
注意: 剥离这些处理程序可能会对继承 _CssStateMixin
的 Dijit 小部件产生不利的视觉影响,因为它可能会阻碍 Dijit 的应用 CSS 类 与悬停和焦点相关。但是,如果您担心 _CssStateMixin
会影响性能,那么至少值得尝试确认或否认您的怀疑。
首先我们必须创建一个简单的模块,其中 returns 一个什么都不做的函数,稍后我们将在 dijit/_CssStateMixin
加载时替换 dojo/domReady
,这样它仍然可以调用 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 FAQ.